2407串行通信接口典型应用举例
时间:12-02 09:46 阅读:752次
*温馨提示:点击图片可以放大观看高清大图
简介:本文给出一个在两个DSP之间实现简单异步通信的通用程序。
//该程序实现2407的串口异步通信
#include "register.h"
//禁止总中断子程序
void inline disable()
{
asm(" setc INTM");
asm(" setc SXM");
}
//使能总中断子程序
void inline enable()
{
asm(" clrc INTM");
}
main( )
{
disable(); //禁止所有中断
*IFR=0xFFFF; // 清除中断标志
*SCSR1=0x81FE; //CLKIN=6M,CLKOUT=24M
*WDCR=0xE8; //不使能看门狗
*SCICCR=0x7; //1个停止位,不使能奇偶校验,空闲线多处理
//器模式,8位字符
*SCICTL1=0x13; //#0013H 使能接收和发送,SLEEP=0 禁止休眠
//方式 , 禁止接收错误中断,TXWAKE=0 即没
//有选定的发送特征
*SCICTL2=0x3; //使能接收和发送中断
*SCIHBAUD=0x2;
*SCILBAUD=0x70; //波特率=4800B/S
*SCICTL1=0x33; //使SCI脱离复位状态
*SCIPRI=0x60; //SCI中断(接收和发送中断)为低优先级中断
*MCRA=0x3;
*PADATDIR=0x100;
*IMR=0x10; //使能UART中断-INT5
enable(); //使能总中断
*SCITXBUF=' ';
while(1) ;
}
void UartSent( ) //发送服务程序
{
const char* var="F2407 UART is fine!";//定义一段需要发送的字符串
static int i=0;
if(i>strlen(var)) return; //如果需要发送的字符都已经发送完,则中断直接返回
*SCITXBUF=var[i++]; //依次发送定义的字符串中的各个字符
*IFR=0x0010; //清除IFR中相应的中断标志
enable(); //开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void UartRec() //接收服务程序
{
static int receive[10],j=0;
receive[j++] = *SCIRXBUF;//依次接收字符
if(j>9) j = 0;
*IFR= 0x0010; //清除IFR中相应的中断标志
enable(); //开总中断,因为一进入中断服务程序总中断就自动关闭了
}
void interrupt uarttr( ) //中断服务程序
{
switch (*PVIR) //根据中断向量寄存器PVIR的值区别是接收还是发送中断
{
case 6:UartRec( ); //如果PIVR=6,则发生了接收中断,执行接收服务程序
case 7:UartSent( ); //如果PIVR=7,则发生了发送中断,执行发送服务程序
}
}
//当由于干扰而引起其它中断时,中断进入此程序直接返回主程序
void interrupt nothing()
{
return;
}