TM4C123笔记(五、SSI(SPI))

it2022-05-05  125

基于官方的example简单注释了一下。

TM4没有SPI接口但是有四个兼容的SSI,这里是一个自收发程序(不要忘记连线哦)

比较简略,等以后补完

(富文本编辑器比markdown好用好多呢...一用markdown就崩...)

#include <stdbool.h> #include <stdint.h> #include "inc/hw_gpio.h"//gpio宏定义 #include "inc/hw_memmap.h"//rom库函数remap #include "inc/hw_types.h"//板子类型宏定义(?) #include "inc/hw_ints.h"//中断宏定义 #include "driverlib/gpio.h"//gpio库 #include "driverlib/pin_map.h"//gpio功能映射 #include "driverlib/ssi.h" #include "driverlib/rom.h" #include "driverlib/rom_map.h" #include "driverlib/sysctl.h" #include "driverlib/interrupt.h" #include "pinout.h" #define NUM_SSI_DATA 3 void UART0IntHandler(void); int main(void) { uint32_t pui32DataTx[NUM_SSI_DATA]; uint32_t pui32DataRx[NUM_SSI_DATA]; uint32_t ui32Index; //使能SSI外设时钟 SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); //pinmux生成文件,里面包含了GPIOPinConfigure和GPIOPinTypeSSI //相关内容如下:(映射引脚的意思,建议直接用Pinmux生成,这里不详细讲) //MAP_GPIOPinConfigure(GPIO_PA4_SSI0RX); //MAP_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_4); //MAP_GPIOPinConfigure(GPIO_PA5_SSI0TX); //MAP_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5); //MAP_GPIOPinConfigure(GPIO_PA2_SSI0CLK); //MAP_GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2); PinoutSet(); //SSI配置:哪个SSI/时钟/模式()/主从模式(主模式)/SPI频率(1MHz)/数据格式(8位) SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 1000000, 8); //使能SSI SSIEnable(SSI0_BASE); //等待数据 //SSIDataGetNonBlocking:若有数据返回值为1并把数据给第二个参数所指变量 //若无数据返回0 while(SSIDataGetNonBlocking(SSI0_BASE, &pui32DataRx[0])) { } pui32DataTx[0] = 's'; pui32DataTx[1] = 'p'; pui32DataTx[2] = 'i'; //发送数据 for(ui32Index = 0; ui32Index < NUM_SSI_DATA; ui32Index++) { SSIDataPut(SSI0_BASE, pui32DataTx[ui32Index]); } //等待发送完成 while(SSIBusy(SSI0_BASE)) { } //得到数据 for(ui32Index = 0; ui32Index < NUM_SSI_DATA; ui32Index++) { SSIDataGet(SSI0_BASE, &pui32DataRx[ui32Index]); pui32DataRx[ui32Index] &= 0x00FF;//因为是8Bit数据,高八位清零了 } while(1) { // // Turn on the LED. // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3); // // Delay for a bit. // SysCtlDelay(SysCtlClockGet() / 1/ 3); // // Turn off the LED. // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0x0); // // Delay for a bit. // SysCtlDelay(SysCtlClockGet() / 1/ 3); } }

最新回复(0)