网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> C5000文章 >> C54X系列 >> 文章正文
  McBSP模块配置为LCD12864的SPI接口         ★★★ 【字体:
McBSP模块配置为LCD12864的SPI接口
作者:61IC    文章来源:本站原创    点击数:    更新时间:2006-7-27    

void LcdObj::LcdSpiSetup(void)
{
#if (ccsdebug == 0)
/*-----------------------------------------------------------
  硬件McBSP模块配置为SPI接口
实验目的:
  演练硬件McBSP模块配置为SPI接口的应用。
------------------------------------------------------------*/
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = 0;
//  McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD = 0;
//  McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口发送
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = (0x02 << SPCR1_CLKSTP);//CLKSTP=10b
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = PCR;
  McBSP1->SPSD = (1 << PCR_FSXM)  //设置FSX引脚为输出,控制LCD12864的片选信号SS
               | (0 << PCR_FSXP)  //FSX引脚平时输出低电平(LCD12864的片选信号SS无效)
               | (1 << PCR_CLKXM) //设置CLKX引脚为输出
               | (1 << PCR_CLKXP);//CLKXP引脚平时输出高电平
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = SRGR1;
  McBSP1->SPSD = (0x07 << SRGR1_FWID)   //0x00~0x07~0xff
               | (0x80 << SRGR1_CLKGDV);//速率0x80
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = SRGR2;
  McBSP1->SPSD = (1 << SRGR2_CLKSM);//
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = RCR1;
  McBSP1->SPSD = (0x00 << RCR1_RFRLEN1);//8BIT
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = XCR1;//延时等待
  McBSP1->SPSD = (0x00 << XCR1_RFRLEN1);//8BIT
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = RCR2;
  McBSP1->SPSD = (0x02 << RCR2_RDATDLY);//0x01
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = XCR2;
  McBSP1->SPSD = (0x02 << XCR2_RDATDLY);//0x01
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD |= (1 << SPCR2_GRST) | (1 << SPCR2_XRST) | (1 << SPCR2_FRST);
  _delay_loop_(1);//延时等待
#else
/*-----------------------------------------------------------
  硬件McBSP模块配置为普通IO软件模拟SPI时序
实验目的:
  演练硬件McBSP模块配置为普通IO的应用.以备IO紧缺时急用。
------------------------------------------------------------*/
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = 0;
  McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD = 0;
  McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口发送
  McBSP1->SPSA = PCR;
  McBSP1->SPSD = (1 << PCR_XIOEN) | (1 << PCR_RIOEN);//设置收发为IO接口,DX输出,DR,CLKS输入
  McBSP1->SPSD |= (1 << PCR_FSXM) | (1 << PCR_CLKXM);//设置FSX,CLKX可做IO输出
  McBSP1->SPSD |= (1 << PCR_FSRM) | (1 << PCR_CLKRM);//设置FSR,CLKR可做IO输出
  McBSP1->SPSD &= ~(1 << PCR_FSXP);//FSX信号=0
  McBSP1->SPSD |= (1 << PCR_CLKXP);//CLKX信号=1
  McBSP1->SPSD |= (1 << PCR_DX_STAT);//DX信号=1
#endif
}

void LcdObj::LcdSend(unsigned char cData)
{
  cData &= 0xff;
#if (ccsdebug == 0)
  McBSP1->DXR1 = cData;//发送串行数据或命令
  _delay_loop_(1);//延时等待
  McBSP1->SPSA = SPCR2;
  while((McBSP1->SPSD & (1 << SPCR2_XRDY)) == 0) {//等待发送结束
    __nop();
    __nop();
  }
  _delay_loop_(1);//延时等待
#else 
unsigned int i;
  McBSP1->SPSA = PCR;
  for (i = 0; i < 8; i ++) {
    McBSP1->SPSD &= ~(1 << PCR_CLKXP);//CLKX信号=0
    _delay_loop_(1);//延时等待
    if (cData & 0x80) {//MSB最高位为1时
      McBSP1->SPSD |= (1 << PCR_DX_STAT);//DX信号=1
 }
 else {
      McBSP1->SPSD &= ~(1 << PCR_DX_STAT);//DX信号=0
 }
 cData <<= 1;
    _delay_loop_(1);//延时等待
    McBSP1->SPSD |= (1 << PCR_CLKXP);//CLKX信号=1
    _delay_loop_(1);//延时等待
  } 
  McBSP1->SPSD |= (1 << PCR_DX_STAT);//DX信号=1
  _delay_loop_(1);//延时等待
#endif 
}

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TMS320VC5402初始化样例代码
    TI DSP5000系列的DSP汇编源代…
    DSP5402之硬件SPI配置
    对于C5000,大于48K的程序如…
    DSP系统常用外围配套芯片——…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号