[资料分享] 有关C2000LaunchPad学习SIC串口发送数据

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


main.c
[cpp] view plain copy
/* 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
[cpp] view plain copy
/* 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
[cpp] view plain copy
/* 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[] = "\nwww.ccnu.edu.cn";  
    for(retry=0; retry!=sizeof(buff); ++retry){  
        SCI_SendByte(buff[retry]);  
    }  
}  

好像没啥总结的,跟其他MCU差不多

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复