java怎么拦截某个对象
343
2022-11-07
DSP的串行通信接口SCI与PC机的通讯设计
1 引言
2 串行通讯接口(SCI)模块
串行通信接口模块有两个多处理器通信协议:空闲线多处理器模式和地址多处理器模式。空闲线模式在地址前留有一个固定空间,该模式没有附加的地址 /数据位,它在处理包含多于10 个字节的数据块方面比地址位模式更有效;地址位模式在每个字节中加入一个额外位(地址位)来区分地址和数据,这种模式在处理多个小数据块时更有效。
·单+5V 电源供电;
· 驱动过载保护;
· 共模输入电压范围:-7V ~ + l2V
MAX485 为8 脚封装,引脚配置如图l 所示,各引脚功能说明如表l 所示。
表1
本设计以PC 机为主机,TMS320F240 为从机,主从机之间进行串口通信。TMS320F240 与PC 机之间采用RS 一485 标准进行半双工通信的接口电路如图2 所示。其中,接收器和驱动器的选择由TMS320F240 的XF/IOPC2 引脚控制。由于一般PC 机上提供的是标准的RS 232 C 串行接口,因此,需要RS 232C/RS485 转换器进行接口转换。
4 上位机PC机的软件设计
上位机PC 采用高级语言C,在用C 语言开发DSP 应用程序时,需要嵌入一句或几句汇编语言,如在程序的初始化阶段对INTM、SXM 等位的配置。用asm 的方式就可以实现单句汇编语言的嵌入。
5 DSP软件设计
5.1 串口初始化
首先对寄存器地址、波特率、数据位、停止位、奇偶校验位进行设置。
void Set()
{
*SCICCR=0x7; //8 位字符,1 停止位,无校验
*SCICTL1=0X13; //使能发送和接受
*SCICTL2=0x03; //使能接受和发送中断
*SCIHBAUD=0x02; //波特率=208h,40MHZ
*SCILBAUD=0x08; //208h=40*106/(9600*8)-1
*SCICTL1=0x33; //使能发送和接受,复位
*SCIPRI=0X60; //SCI 中断(接受和发送中断)为低优先级中断
}
5.2 中断初始化
a)禁止总中断子程序
void inline disable()
{
asm("setc INTM");
asm("setc SXM");
}
b)使能总中断子程序
void inline enable()
{
asm("clrc INTM") ;
}
c)中断服务程序
switch (*PVIR){
//根据中断向量寄存器PVIR 的值区别是接收还是发送中断
case 6:UartRec();
//如果PVIR=6,则发生了接受中断,执行接受中断服务程序
}
}
d)当由于干扰而引起其它中断时,中断进入此程序直接返回主程序
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;
cBuffer[k+1]=’’;
nlen=k+1;
Set();
Break;
}
k++; k%=16;
}
}
5.4程序初始化
# include "2407c.h"
//初始化子程序
*IFR=0xFFFF; //清除中断标志
*WDCR=0Xe8; //不使能看门狗
*MCRA=0x3; //use SCITXD, SCIRXD
}
5.5主程序
Main(){
Set();
Disable(); //屏蔽所有中断
Enable(); //使能总中断
While(1) {
unsigned int uwork;
Do{
Uwork=(*SCICTL2);
}while (uwork&0x0c0!=0x0c0);
*IFR=0x0010;
Enable();
}
Do{
Uwork=(*SCICTL2);
}while (uwork&0x0c0!=0x0c0);
(*SCITXBUF)=‘“’;
}
For(;;){
:
}
}
6结束语
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~