前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SCI简单实现

SCI简单实现

作者头像
歪先生
发布2020-01-02 17:40:05
7650
发布2020-01-02 17:40:05
举报
文章被收录于专栏:歪先生_自留地歪先生_自留地

SCI简单实现

开个场白

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

功能简介

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

秀个秀秀

硬件

秀调试

调试界面

代码输出

代码演示

代码语言:javascript
复制
#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

发送缓存

SCIFFTX

FIFO发送

SCIEERX

FIFO接收

SCIFFCT

FIFO控制寄存器

SCIPRI

优先权控制

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

原因

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018 年 07 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SCI简单实现
    • 开个场白
      • 功能简介
        • 秀个秀秀
          • 硬件
          • 秀调试
        • 代码演示
          • 相关寄存
            • 整体介绍
          • 原因
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档