DSP

C2000LaunchPad学习记录(4)——SIC串口发送数据

2019-07-13 18:11发布

参照网上例程,学习了下SCI发送数据。 CCS使用小结: 1、Ctrl + /  注释代码很方便 2、CCS项目管理中,不要轻易删除某个.c或.h的文件。在MDK或者IAR中,删了只是把文件从工程项目中去掉,文件还在。而在CCS中,删了真的就没有了,真的没有了。 3、赞一个,CCS5.4对中文支持做的不错,不像MDK,动不动就乱码。

main.c /* Includes ------------------------------------------------------------------*/ #include #include #include "SystemInit.h" #include "SubFunction.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ void main(void) { InitSysCtrl(); // 系统控制初始化 InitGpio(); // GPIO 初始化 PieVectTable_Configure(); // 中断向量表初始化 LED_Configure(); // LED 引脚配置 // EXTI_Configure(); // 按键中断配置 SCI_Configure(); // SCI 初始化 while(1){ SCI_PrintfStringTest(); LED_Blink(); } }
 为了使main里面不至于看起来那么,把中断向量表初始化和LED配置放这里了 SystemInit.c
/* Includes ------------------------------------------------------------------*/ #include #include /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * Function Name : PieVectTable_Configure * Description : 配置PIE中断向量表 * Input : None * Output : None * Return : None *******************************************************************************/ void PieVectTable_Configure(void) { DINT; InitPieCtrl(); // 禁止CPU中断 IER = 0x0000; // 清楚CPU所有中断标志 IFR = 0x0000; // 位向量表中的所有中断向量配置对应的入口地址 InitPieVectTable(); EINT; } /******************************************************************************* * Function Name : LED_Configure * Description : 配置LED对应GPIO * Input : None * Output : None * Return : None *******************************************************************************/ void LED_Configure(void) { // 允许访问受保护的空间 EALLOW; // 配置LED0、1、2、3 对应的 GPIO0、1、2、3为输出IO GpioCtrlRegs.GPADIR.all=0x000f; // 禁止访问受保护的空间 EDIS; } /******************************************************************************* * Function Name : LED_Blink * Description : LED流水灯 * Input : None * Output : None * Return : None *******************************************************************************/ void LED_Blink(void) { GpioDataRegs.GPATOGGLE.bit.GPIO0=1; //电平翻转 DELAY_US(100000L); //延时 GpioDataRegs.GPATOGGLE.bit.GPIO1=1; DELAY_US(100000L); GpioDataRegs.GPATOGGLE.bit.GPIO2=1; DELAY_US(100000L); GpioDataRegs.GPATOGGLE.bit.GPIO3=1; DELAY_US(100000L); }
SCI配置 SCI_Configure.c
/* Includes ------------------------------------------------------------------*/ #include #include #include "C2000_it.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define CBR_110 11E1 #define CBR_300 3E2 #define CBR_600 6E2 #define CBR_1200 12E2 #define CBR_2400 24E2 #define CBR_4800 48E2 #define CBR_9600 96E2 #define CBR_14400 144E2 #define CBR_19200 192E2 #define CBR_38400 384E2 #define CBR_56000 56E3 #define CBR_57600 576E2 #define CBR_115200 1152E2 #define CBR_128000 128E3 #define CBR_256000 256E3 #define CPU_FREQ 60E6 #define LSPCLK_FREQ (CPU_FREQ/4) #define SCI_BAUD(baud) (LSPCLK_FREQ/(baud*8))-1 /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /**************************************************************************** * Function Name : SCI_Configure * Description : SCI 引脚和参数配置 * Input : None * Output : None * Return : None ******************************************************************************/ void SCI_Configure(void) { EALLOW; // GPIO28/SCI_RX,配置成上拉输入,输入限定脉冲周期为3*2=6个时钟周期 GpioCtrlRegs.GPADIR.bit.GPIO28 = 0; // 配置为输入 GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // 使能上拉 GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // 配置 GPIO28 为SCI_RX GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // 限定输入脉冲为6 // GPIO29/SCI_TX,配置为无上拉输出 GpioCtrlRegs.GPADIR.bit.GPIO29 = 1; // 配置为输出 GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1; // 禁止上拉 GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // 配置 GPIO29 为SCI_TX SciaRegs.SCICTL1.bit.SWRESET = 0; // 复位SCI寄存器 SciaRegs.SCICTL1.bit.SWRESET = 1; // 完成复位 // 配置SCI 8位数据位,1个停止位,无校验,波特率 115200 SciaRegs.SCICCR.bit.STOPBITS = 0; // 0:1个停止位 1:两个停止位 SciaRegs.SCICCR.bit.PARITY = 0; // 0:奇校验 1:偶校验 SciaRegs.SCICCR.bit.PARITYENA = 0; // 0:禁止校验 1:允许校验 SciaRegs.SCICCR.bit.SCICHAR = 7; // 7:数据位8位 SciaRegs.SCIHBAUD = 0; SciaRegs.SCILBAUD = SCI_BAUD(CBR_115200); SciaRegs.SCICTL1.bit.RXENA = 1; // 0:禁止接收 1:使能接收 SciaRegs.SCICTL1.bit.TXENA = 1; // 0:禁止发送 1:使能发送 SciaRegs.SCICTL2.bit.RXBKINTENA = 0; // 0:禁止接收中断 1:允许接收中断 SciaRegs.SCICTL2.bit.TXINTENA = 0; // 0:禁止发磅中断 1:允许发送中断 EDIS; } /**************************************************************************** * Function Name : SCI_SendByte * Description : SCI 发送一个字节 * Input : unsigned char TxByte:待发送的字节 * Output : None * Return : None ******************************************************************************/ void SCI_SendByte(unsigned char TxByte) { while(SciaRegs.SCICTL2.bit.TXRDY != 1); SciaRegs.SCITXBUF = TxByte; } /**************************************************************************** * Function Name : SCI_PrintfStringTest * Description : SCI 发送一个字符串测试 * Input : None * Output : None * Return : None ******************************************************************************/ void SCI_PrintfStringTest(void) { unsigned char retry = 0; char buff[] = " www.ccnu.edu.cn"; for(retry=0; retry!=sizeof(buff); ++retry){ SCI_SendByte(buff[retry]); } }
好像没啥总结的,跟其他MCU差不多。