SCI简单实现

SCI简单实现

开个场白

既然是自己的比较,其实就不用那么在意格式什么,自己喜欢就好。希望你能习惯,我都知道没人看自己开心就好,我正在探索那种笔记方式比较实用。

功能简介

  • 之后代码用的模块会越来越多,所以需要增加这个说明。
  • GPIO输入输出,串口打印。
  • 用的串口模块FT232RL
  • 继电器输出
  • 触摸开关输入

秀个秀秀

硬件

秀调试

调试界面


代码输出

代码演示

#include "DSP28x_Project.h"//头文件

void scia_echoback_init(void);  //回复函数初始化
void scia_fifo_init(void);      //SCI_FIFO初始化
void scia_xmit(int a);          //等待发送完成函数
void scia_msg(char *msg);       //发送消息函数
void gpio_init(void);            //GPIO初始化

Uint16 LoopCount;               //定义两个,循环计数
Uint16 ErrorCount;              //错误计数
Uint16 a=0;

void main(void)
{

   Uint16 ReceivedChar;         //收到字符
   char *msg;                   //定义MSG
   InitSysCtrl();
   InitSciaGpio();              //初始化sci串口,函数在F2806x_Sci文件中
   DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();
   gpio_init();


    LoopCount = 0;              //计数清零
    ErrorCount = 0;

    scia_fifo_init();
    scia_echoback_init();

    msg = "\r\n\n\nHello World!\0";
    scia_msg(msg);              //发送MSG

    msg = "\r\nYou will enter a character, and the DSP will out the msg \n\0";
    scia_msg(msg);

    for(;;)
    {
       msg = "\r\nOut Msg: \0";
       scia_msg(msg);

       while(SciaRegs.SCIFFRX.bit.RXFFST !=1) {     //等待接收完成
           if(GpioDataRegs.GPADAT.bit.GPIO21 == 1)    //GPIO输入处理
           {

               msg = "  Gpio in 1 \0";
               scia_msg(msg);
               while(GpioDataRegs.GPADAT.bit.GPIO21 == 1){}
               msg = "\r\nOut Msg: \0";
               scia_msg(msg);
           }
       }

       ReceivedChar = SciaRegs.SCIRXBUF.all;    //对收到字符进行赋值

       if(ReceivedChar=='a')
       {
           for(a=0;a<10;a++)    //GPIO输出判断
           {
           GpioDataRegs.GPADAT.bit.GPIO23=0;
           DELAY_US(100000);
           GpioDataRegs.GPADAT.bit.GPIO23=1;
           DELAY_US(100000);
           }
           msg = "  Ture Code \0";
           scia_msg(msg);
           scia_xmit(ReceivedChar);
       }
       else
       {
       msg = "  Error Code \0";
       scia_msg(msg);
       scia_xmit(ReceivedChar);     //发送收到函数
       LoopCount++;                 //计数器加一
       }
    }


}

// 测试,SCIA DLB,8位字,波特率9600,默认值,1个停止位,无奇偶校验
void scia_echoback_init()
{

    SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
    SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE

    SciaRegs.SCICTL2.bit.TXINTENA =1;
    SciaRegs.SCICTL2.bit.RXBKINTENA =1;

    SciaRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 22.5MHz (90 MHz SYSCLK).
    SciaRegs.SCILBAUD    =0x0024;

    SciaRegs.SCICTL1.all =0x0023;
}

void scia_xmit(int a)
{
    while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
    SciaRegs.SCITXBUF=a;

}

void scia_msg(char * msg)
{
    int i;
    i = 0;
    while(msg[i] != '\0')
    {
        scia_xmit(msg[i]);
        i++;
    }
}


void scia_fifo_init()
{
    SciaRegs.SCIFFTX.all=0xE040;
    SciaRegs.SCIFFRX.all=0x2044;
    SciaRegs.SCIFFCT.all=0x0;

}

void gpio_init(void)
{
    EALLOW;
    GpioCtrlRegs.GPBMUX2.bit.GPIO54=0;
    GpioCtrlRegs.GPBPUD.bit.GPIO54=0;
    GpioCtrlRegs.GPBDIR.bit.GPIO54=1;
    GpioDataRegs.GPBDAT.bit.GPIO54 = 1;
    EDIS;
    EALLOW;
    GpioCtrlRegs.GPAMUX2.bit.GPIO23=0;
    GpioCtrlRegs.GPAPUD.bit.GPIO23=0;
    GpioCtrlRegs.GPADIR.bit.GPIO23=1;
    GpioDataRegs.GPADAT.bit.GPIO23 = 1;
    EDIS;
    EALLOW;
    GpioCtrlRegs.GPAMUX2.bit.GPIO21=0;
    GpioCtrlRegs.GPADIR.bit.GPIO21=0;
    GpioCtrlRegs.GPAQSEL2.bit.GPIO21=0;
    GpioDataRegs.GPADAT.bit.GPIO21 = 0;
    EDIS;
}

相关寄存

想了想,之前把所有所有寄存器都写在上面,一方面浪费时间,另一方面意义不大,必要的时候真的需要一本参考书,我在这里就说一下我的参考书推荐一下就好了。没有广告。之后本代码使用到寄存器详细介绍,其他寄存器带过,具体使用需要自己查找,我会标注我自己参考书页码,你可能不适用

整体介绍

寄存器名称寄存器说明
SCICCR通信控制寄存器
SCICTL1控制寄存器1
SCIHBAUD波特率高字节
SCILBAUD低字节
SCICTL2控制寄存器2
SCIRXST接收状态寄存器
SCIRXEMU仿真缓冲
SCIRXBUF接收缓存
SCITXBUF发送缓存
SCIFFTXFIFO发送
SCIEERXFIFO接收
SCIFFCTFIFO控制寄存器
SCIPRI优先权控制

总结,经过我的分析,一般控制寄存器会有很多配置选项。好像是废话。

原因

这是之前写的,在这里我先简单的更新一下,更具体会在稍后写出来。

最后修改:2019 年 02 月 04 日 09 : 28 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论