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

[复制链接]
1785|0
 楼主| 强仔00001 发表于 2014-12-24 20:35 | 显示全部楼层 |阅读模式
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是低电平。如手册的截图:
QQ截图20141224201235.png
通过SPI_C2寄存器配置成DMA模式,如手册的截图:
QQ截图20141224201629.png
QQ截图20141224201614.png
接着打开DMA通道,然后配置FIFO模式,最后设置波特率。
波特率的计算公式:
QQ截图20141224201800.png
波特率寄存器的相关的说明:
QQ截图20141224201934.png
然后接下来就是DMA的配置,这里我就不多说了,只要配置好原地址,目的地址,传输的字节数就可以了。
下面放出测试图:
IMG_20141224_202403.jpg IMG_20141224_202357.jpg IMG_20141224_202354.jpg IMG_20141224_202341.jpg
附上源代码: SPI.zip (937.17 KB, 下载次数: 15)


您需要登录后才可以回帖 登录 | 注册

本版积分规则

65

主题

799

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部