void LcdObj::LcdSpiSetup(void)<br />{<br />#if (ccsdebug == 0)<br />/*-----------------------------------------------------------<br /> 硬件McBSP模块配置为SPI接口<br />实验目的:<br /> 演练硬件McBSP模块配置为SPI接口的应用。<br />------------------------------------------------------------*/<br /> McBSP1->SPSA = SPCR1;<br /> McBSP1->SPSD = 0;<br />// McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = SPCR2;<br /> McBSP1->SPSD = 0;<br />// McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口发送<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = SPCR1;<br /> McBSP1->SPSD = (0x02 << SPCR1_CLKSTP);//CLKSTP=10b<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = PCR;<br /> McBSP1->SPSD = (1 << PCR_FSXM) //设置FSX引脚为输出,控制LCD12864的片选信号SS<br /> | (0 << PCR_FSXP) //FSX引脚平时输出低电平(LCD12864的片选信号SS无效)<br /> | (1 << PCR_CLKXM) //设置CLKX引脚为输出<br /> | (1 << PCR_CLKXP);//CLKXP引脚平时输出高电平<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = SRGR1;<br /> McBSP1->SPSD = (0x07 << SRGR1_FWID) //0x00~0x07~0xff <br /> | (0x80 << SRGR1_CLKGDV);//速率0x80<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = SRGR2;<br /> McBSP1->SPSD = (1 << SRGR2_CLKSM);//<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = RCR1;<br /> McBSP1->SPSD = (0x00 << RCR1_RFRLEN1);//8BIT<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = XCR1;//延时等待<br /> McBSP1->SPSD = (0x00 << XCR1_RFRLEN1);//8BIT<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = RCR2;<br /> McBSP1->SPSD = (0x02 << RCR2_RDATDLY);//0x01<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = XCR2;<br /> McBSP1->SPSD = (0x02 << XCR2_RDATDLY);//0x01<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = SPCR2;<br /> McBSP1->SPSD |= (1 << SPCR2_GRST) | (1 << SPCR2_XRST) | (1 << SPCR2_FRST);<br /> _delay_loop_(1);//延时等待<br />#else<br />/*-----------------------------------------------------------<br /> 硬件McBSP模块配置为普通IO软件模拟SPI时序<br />实验目的:<br /> 演练硬件McBSP模块配置为普通IO的应用.以备IO紧缺时急用。<br />------------------------------------------------------------*/<br /> McBSP1->SPSA = SPCR1;<br /> McBSP1->SPSD = 0;<br /> McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收<br /> McBSP1->SPSA = SPCR2;<br /> McBSP1->SPSD = 0;<br /> McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口发送<br /> McBSP1->SPSA = PCR;<br /> McBSP1->SPSD = (1 << PCR_XIOEN) | (1 << PCR_RIOEN);//设置收发为IO接口,DX输出,DR,CLKS输入<br /> McBSP1->SPSD |= (1 << PCR_FSXM) | (1 << PCR_CLKXM);//设置FSX,CLKX可做IO输出<br /> McBSP1->SPSD |= (1 << PCR_FSRM) | (1 << PCR_CLKRM);//设置FSR,CLKR可做IO输出<br /> McBSP1->SPSD &= ~(1 << PCR_FSXP);//FSX信号=0<br /> McBSP1->SPSD |= (1 << PCR_CLKXP);//CLKX信号=1<br /> McBSP1->SPSD |= (1 << PCR_DX_STAT);//DX信号=1<br />#endif<br />}<br /><br /><br /><br /><br /><br /><br /><br />void LcdObj::LcdSend(unsigned char cData)<br />{<br /> cData &= 0xff;<br />#if (ccsdebug == 0)<br /> McBSP1->DXR1 = cData;//发送串行数据或命令<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSA = SPCR2;<br /> while((McBSP1->SPSD & (1 << SPCR2_XRDY)) == 0) {//等待发送结束<br /> __nop();<br /> __nop();<br /> }<br /> _delay_loop_(1);//延时等待<br />#else <br />unsigned int i;<br /> McBSP1->SPSA = PCR;<br /> for (i = 0; i < 8; i ++) {<br /> McBSP1->SPSD &= ~(1 << PCR_CLKXP);//CLKX信号=0<br /> _delay_loop_(1);//延时等待<br /> if (cData & 0x80) {//MSB最高位为1时<br /> McBSP1->SPSD |= (1 << PCR_DX_STAT);//DX信号=1<br /> }<br /> else {<br /> McBSP1->SPSD &= ~(1 << PCR_DX_STAT);//DX信号=0<br /> }<br /> cData <<= 1;<br /> _delay_loop_(1);//延时等待<br /> McBSP1->SPSD |= (1 << PCR_CLKXP);//CLKX信号=1<br /> _delay_loop_(1);//延时等待<br /> } <br /> McBSP1->SPSD |= (1 << PCR_DX_STAT);//DX信号=1<br /> _delay_loop_(1);//延时等待<br />#endif <br />}<br /><br /> <br /> 相关链接:<a href='http://www.**/blog/hotpower/11708/message.aspx'>http://www.**/blog/hotpower/11708/message.aspx</a>
|