- void SPI_Init(void)
- {
- /**** 配置SPI的IO引脚模式 ****/
- P1M0 |= 0xe0; //配置MOSI/MISO/SCLK引脚为推挽输出
- P1M1 &= ~0xe0;
- P1PU |= 0xe0; //允许准双向口内部上拉电阻
- TFT_MOSI = 1; //引脚上拉
- TFT_MISO = 1;
- TFT_SCLK = 1;
-
- /**** 配置SPI模式 ****/
-
- SPI_S1 = 0x00; // 选择SPI1的引脚 00:P1+ 01:P2+ 10:P4+ 11:P3+
- SPI_S0 = 0x00;
-
- //控制寄存器
- SSIG = 0X01; //控制寄存器 忽略SS引脚功能
- SPEN = 0x01; //使能SPI
- DORD = 0x00; //先发送高位MSB,若为1则先发送低位LSB
- MSTR = 0x01; //设置为主机模式,单主单从模式。须根据SSIG进行不同设置
- CPOL = 0x01; //时钟极性为高,即空闲时是高电平。极性相反时传输数据
- CPHA = 0x01; //前沿驱动,后沿采样
-
- //时钟配置
- //系统默认启动内部高速HRC,CLKSEL = 0x00:配置为内部高速HRC -00-00-> MCLK -> HSIOCK -HSCLKDIV-> HSCLK -SPI_CLKDIV-> SPI
- //同时,HSCLK是高速外设时钟源。当使用HSPI时在3V下最高频率为20MHz(同时调整PxSR寄存器为高速输出模式)
- CLKSEL &= ~0x40; //选择MCLK为高速IO时钟源
- HSCLKDIV = 0x01; //高速时钟1分频 -> 24M
- SPI_CLKDIV = 0x01; //SPI输入时钟1分频,0-255 -> 24M
- SPR1 = 0x01; //SCLK频率 = 24MHz/2 = 12MHz
- SPR0 = 0x01;
-
- //中断配置
- ESPI = 0x00; //禁止SPI中断
- SPSTAT = 0xc0; //清除中断标志位SPIF和写冲突标志位WCOL
-
- UART1_printf("开启LCD的SPI\n");
- }
-
-
- u8 SPI_WriteByte(u8 Byte)
- {
- SPDAT = Byte;
- while(!SPIF); //等待接收完一个byte
- SPSTAT = 0xc0; //清SPIF/WCOL标志
- return (SPDAT);
- }
复制代码
SPI的配置有问题吗?
复制代码 这是LCD的驱动配置
源代码
08_AI8051U_ST7796SPI.zip
(10.62 MB, 下载次数: 47)
|