DSP與PC機(jī)串行通訊的設(shè)計(jì)
5 DSP軟件設(shè)計(jì)
5.1 串口初始化
首先對(duì)寄存器地址、波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位進(jìn)行設(shè)置。
void Set()
{
*SCICCR=0x7; //8 位字符,1 停止位,無(wú)校驗(yàn)
*SCICTL1=0X13; //使能發(fā)送和接受
*SCICTL2=0x03; //使能接受和發(fā)送中斷
*SCIHBAUD=0x02; //波特率=208h,40MHZ
*SCILBAUD=0x08; //208h=40*106/(9600*8)-1
*SCICTL1=0x33; //使能發(fā)送和接受,復(fù)位
*SCIPRI=0X60; //SCI 中斷(接受和發(fā)送中斷)為低優(yōu)先級(jí)中斷
}
5.2 中斷初始化
a)禁止總中斷子程序
void inline disable()
{
asm("setc INTM");
asm("setc SXM");
}
b)使能總中斷子程序
void inline enable()
{
asm("clrc INTM") ;
}
c)中斷服務(wù)程序
void interrupt uarttr(){
switch (*PVIR){
//根據(jù)中斷向量寄存器PVIR 的值區(qū)別是接收還是發(fā)送中斷
case 6:UartRec();
//如果PVIR=6,則發(fā)生了接受中斷,執(zhí)行接受中斷服務(wù)程序
}
}
d)當(dāng)由于干擾而引起其它中斷時(shí),中斷進(jìn)入此程序直接返回主程序
void interrupt nothing(){
return; }
5.3中斷處理
void UartRec(){
unsigned int uwork;
int I, k;
k=0;
while(1) {
do{
uwork=(*SCIRXST);
}while((uwork&0x40= =0));
cReceive=(*SCIRXBUF);
cBuffer[k]= cReceive;
if(cReceive= =’?!?{
cBuffer[k+1]=’’;
nlen=k+1;
Set();
Break;
}
k++; k%=16;
}
}
5.4程序初始化
# include "2407c.h"
//初始化子程序
Initial(){
*IFR=0xFFFF; //清除中斷標(biāo)志
*WDCR=0Xe8; //不使能看門(mén)狗
*SCSR1=0x81FE; //CLKIN=6M, CLKOUT=24M
*MCRA=0x3; //use SCITXD, SCIRXD
*PADATDIR=0x100; //設(shè)置ADIR 為輸出口
}
5.5主程序
Main(){
Set();
Disable(); //屏蔽所有中斷
Initial(); //系統(tǒng)初始化
Enable(); //使能總中斷
While(1) {
unsigned int uwork;
For (intI=0;I《10;I++){
Do{
Uwork=(*SCICTL2);
}while (uwork&0x0c0!=0x0c0);
?。?SCITXBUF)=cAnswer[i];
*IFR=0x0010;
Enable();
}
Do{
Uwork=(*SCICTL2);
}while (uwork&0x0c0!=0x0c0);
?。?SCITXBUF)=‘“’;
}
For(;;){
?。?P> }
}
6結(jié)束語(yǔ)
本文作者創(chuàng)新點(diǎn):利用DSP 的串行通信接口(SCI)和功能強(qiáng)大的開(kāi)發(fā)環(huán)境CCS,可以方便地實(shí)現(xiàn)DSP 與PC 機(jī)間的單機(jī)或多機(jī)串行通信。通過(guò)實(shí)際運(yùn)行表明,利用TMS320 的SCI 模塊實(shí)現(xiàn)DSP 之間或與PC 機(jī)的通信,與傳統(tǒng)的C51 單片機(jī)相比,其電路簡(jiǎn)單、設(shè)置靈活、運(yùn)行速度快,性能可靠穩(wěn)定。
評(píng)論