打印
[Kinetis]

【Kinetis分享】+ KL46硬件SPI刷屏

[复制链接]
1287|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SPI是串行外设接口(SerialPeripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。
现在很多MCU都集成了SPI模块了,这里我就用硬件SPI+DMA刷个屏幕,用到的寄存器不多。用到了SPI_C1SPI_C2SPI_C3SPI_BR这几个寄存器。
首先是打开SPI配置部分,代码如下:
void vfnSPI8_Init(void)
{
         SIM_SCGC4|= SIM_SCGC4_SPI1_MASK;
         SIM_SCGC5|= SIM_SCGC5_PORTE_MASK;
         
         /*SPI1_CLK = PTE2 = ALT2 */
         PORTE_PCR2= PORT_PCR_MUX(0x02)|PORT_PCR_DSE_MASK;
         /*SPI1_CS0 = PTE4 = ALT2 */
         PORTE_PCR4= PORT_PCR_MUX(0x02);
         /*SPI1_MOSI = PTE1 = ALT2 */
         PORTE_PCR1= PORT_PCR_MUX(0x02)|PORT_PCR_DSE_MASK;
         /*SPI1_MISO = PTE3 = ALT2*/
         PORTE_PCR3= PORT_PCR_MUX(0x02);
         
         
         SPI_C1|= SPI_C1_MSTR_MASK | SPI_C1_SSOE_MASK |SPI_C1_CPOL_MASK|SPI_C1_CPHA_MASK;
         
         SPI_C2|= SPI_C2_MODFEN_MASK|SPI_C2_TXDMAE_MASK|SPI_C2_RXDMAE_MASK;//
               
       SPI_C3 |= SPI_C3_FIFOMODE_MASK;
         /*SPI_BAUD = BUS_CLK / ((SPPR+1)x 2^(SPR+1)) */
         /*SPI_BAUD = 24Mhz / (6x(2^(1)))*/
         /*SPI_BAUD = 1Mhz */
         SPI_BR= SPI_BR_SPPR(SPI_BAUDRATE_PRESCALER) | SPI_BR_SPR(SPI_BAUDRATE_DIVISOR);
         
}
第一步是打开SPI时钟和PORTE脚时钟,用的是3线的SPISCLK脚是PORTE2MOSIPORTE1,还有DC(命令/数据控制端)用到了PORTE5脚,RST脚用PORTE6脚。
接下来就是SPI模块参数的配置。把通过SPI_C1寄存器配置成主模式,空闲时SCLK是低电平。如手册的截图:
通过SPI_C2寄存器配置成DMA模式,如手册的截图:
接着打开DMA通道,然后配置FIFO模式,最后设置波特率。
波特率的计算公式:
波特率寄存器的相关的说明:
然后接下来就是DMA的配置,这里我就不多说了,只要配置好原地址,目的地址,传输的字节数就可以了。
下面放出测试图:
附上源代码: SPI.zip (937.17 KB)


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

799

帖子

8

粉丝