📄 sci1.c
字号:
#include "DSP280x_Device.h"
#include "DSP280x_Examples.h"
//#define CPU_RATE 6.000L
#include<stdio.h>
//Uint16 ReceivedAChar;
unsigned int Sci_VarRx[8];
unsigned int Send_Flag;
int i,j;
static char table[]={ 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };
/**********微妙延时**********/
void delay_us(int time)
{
do
{
time--;
}
while(time>1);
}
/**********毫秒延时**********/
void delay_ms(unsigned int time)
{
while(time!=0)
{
delay_us(750);
time--;
}
}
/**********系统初始化**********/
void sys_init(void)
{
asm(" setc SXM"); // 抑制符号位扩展
asm(" clrc OVM"); // 累加器中结果正常溢出
asm(" clrc CNF"); // B0被配置为数据存储空间
asm(" clrc INTM");
SysCtrlRegs.SCSR=0x83FE; // 系统时钟CLKOUT=20*2=40M
SysCtrlRegs.WDCR=0x006F; // 禁止看门狗,看门狗时钟64分频
SysCtrlRegs.WDKEY=0x5555;
SysCtrlRegs.WDKEY=0xAAAA; // 初始化看门狗
IER=0x0000; // 禁止所有中断
IFR=0x0000;
SciaRegs.SCICTL1.all=0X20| SciaRegs.SCICTL1.all;
// 清除全部中断标志,"写1清0"
}
/**********SCI初始化**********/
void sci_init(void)
{ SciaRegs.SCIFFTX.all=0x8000;
SciaRegs.SCICCR.all =0x0007; // 数据8位
SciaRegs.SCIHBAUD =0x01; // BAUD 9600,CLKOUT=30M
SciaRegs.SCILBAUD =0x86;
SciaRegs.SCICTL1.all =0x0003; // 收发使能
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x204f;
SciaRegs.SCIFFCT.all=0x0;
PieCtrl.PIEIER9.bit.INTx1 = 1;
PieCtrl.PIEIER9.bit.INTx2 = 1;
for(i = 0; i < 8; i++)
{
Sci_VarRx[i] = 0;
}
i = 0;
j = 0;
Send_Flag = 0;
#if SCIA_INT
/*设置中断服务程序入口地址*/
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TXAINT = &SCITXINTA_ISR;
PieVectTable.RXAINT = &SCIRXINTA_ISR;
EDIS; // This is needed to disable write to EALLOW protected registers
/*开中断*/
IER |= M_INT9;
#endif
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// SciaRegs.SCITXBUF=0;
// MCRA=0X03; // 使能SCI
}
void UartSent() //发送服务程序
{
for(;;)
{
if(SciaRegs.SCICTL2.bit.RXRDY==1)&&(Send_Flag==1)
SciaRegs.SCITXBUF= table[i];
Send_Flag = 0;
i++;
if(i == j)
{
i = 0;
j = 0;
}
}
}
void UartRec() //接收服务程序
{ for(;;)
{ #if !SCIA_INT
if(SciaRegs.SCIRXST.bit.TXREDY==1);
{
Sci_VarRx[j] = SciaRegs.SCIRXBUF.all;
Send_Flag = 1;
j++;
if(j == 18)
{
j = 0;
}
}
#endif
}
}
main()
{
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitSciaGpio();
DINT;
InitPieCtrl();
InitPieVectTable();
sys_init();
sci_init();
UartSent();
UartRec();
delay_ms(200);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -