既然是自己的比较,其实就不用那么在意格式什么,自己喜欢就好。希望你能习惯,
我都知道没人看自己开心就好,我正在探索那种笔记方式比较实用。
调试界面
代码输出
#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 | 优先权控制 |
总结,经过我的分析,一般控制寄存器会有很多配置选项。好像是废话。
这是之前写的,在这里我先简单的更新一下,更具体会在稍后写出来。