📄 wdp999.c~
字号:
/*************************************************************************/
/*2007年5月16日串口发送中断程序*/
/*************************************************************************/
#include "DSP2407A.h"
#include "mine20060907.h"
typedef unsigned int uint;
unsigned int cn;
unsigned int vc;
unsigned char InterruptFlag;
unsigned char x;
unsigned char m;
unsigned char flg = 0;
const char *tra = "AAA";
void main(void)
{
int i,j;
ESXM;
EOVM;
ECNF;
sys_init();
//*SCICTL2=0x80;
for(cn=0; cn<500; cn++){;}
while(1)
{
*SCICTL1 |= 0x02;
}
}
enable()
{
asm(" clrc INTM");
}
void UartSent( ) //发送服务程序
{
EINT;
while(1)
{
while(*SCICTL2 & 0x80 == 0x80) //TXRDY==1 (SCITXBUF is empty)
{
*SCITXBUF = '9';
for(cn=0; cn<500; cn++)
{; ;}
*SCICTL1 |= 0x03; //enable TXENA and RXENA
}
}
enable(); //开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void UartRec( ) //接收服务程序
{
*SCITXBUF = 'A';
enable(); //开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void interrupt uarttr( ) //中断服务程序
{
switch (*PVIR) //根据中断向量寄存器PVIR的值区别是接收还是发送中断
{
case 6: UartRec( ); break; //如果PIVR=6,则发生了接收中断,执行接收服务程序
case 7: UartSent( ); break; //如果PIVR=7,则发生了发送中断,执行发送服务程序
}
}
//当由于干扰而引起其它中断时,中断进入此程序直接返回主程序
void sys_init(void)
{
DINT; //disable Interrupt (SETC INTM)
*WDCR = 0x00E8;
*SCSR1 = 0x81FE;
*MCRA = 0x3; //0:SCITXD 1:SCIRXD
*PADATDIR = 0x100; //configue PA0(SCITXD) as output 0
//config SCI
*SCICTL1 = 0x03; //TXENA(1) and RXENA(0) = 1
*SCICCR = 0x07; //1个停止位,不使能奇偶校验,空闲线多处理器模式,8位字符
//#0013H 使能接收和发送,SLEEP=0 禁止休眠
// *SCICTL1=0x13; //方式, 禁止接收错误中断,TXWAKE=0 即没
//有选定的发送特征
*SCIHBAUD = 0x00;
*SCILBAUD = 0x2B; //波特率=115200B/S 晶振40M吗
*SCIPRI = 0x60; //SCI中断(接收和发送中断)为低优先级中断
*IMR = 0x10; //使能UART中断-INT5
*SCICTL2 | =0x03; //使能接收和发送中断
*SCICTL1 = 0x23; //使SCI脱离复位状态 SW RESET=1
enable(); //使能总中断
*SCITXBUF = '';
}
void interrupt nothing()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -