在线时间0 小时
UID2010897
注册时间2013-5-15
NXP金币0
该用户从未签到
新手上路

- 积分
- 14
- 最后登录
- 1970-1-1
|
请问各位大侠,xs128与xdg128有很大区别吗?我最近在做LIN通讯,通过配置SCI模块来实现,编写的程序在xs128的片子上能顺利发送帧请求,不会产生错误,可是在xdg128的片子上后,LIN通讯会产生很多的错误"incorrect sync break length",说是同步间隔场长度不对,下面附上主要代码,我初步分析在发送同步间隔场时(SCI0CR2_SBK=1;
SCI0CR2_SBK=0;) 用xs128片子时 用示波器测得为13bit显性电平,而在xdg128片子上运行时只有12bit的显性电平,LIN通讯协议上指明必须至少为13bit显性电平,不知问题是否在此?如何解决,请各位大侠指教。
#include /* common defines and macros */
#include
void main(void)
{
DisableInterrupts;
MCUInit();
SCIInit();
EnableInterrupts;
for(;;)
{
SendLinHeader(&LinFrame34);
Delay_ms(50);
}
}
/*初始化SCI*/
void SCIInit(void)
{
uint8_t t;
//定义波特率Bt=9600,SCIBD=fBUS/(16*Bt)
//fBUS=32MHz Bt=9600
SCI0BDL = 0xD0; //须先给低8位赋值
SCI0BDH = 0x00; //再给高8位赋值
SCI0SR2 = 0x04; //中断位13-14bit
SCI0CR1 = 0x00; //设置允许SCI,正常码输出,8位数据,无校验
t = SCI0DRL;
t = SCI0SR1;
SCI0CR2 = 0x0c; //允许SCI接收和发送
}
void SendLinHeader(LinFrame *linframe)//发送LIN请求
{
SCI0CR2_RE = 0;//disable recevier
//产生同步间隔场//
SCI0CR2_SBK=1;
SCI0CR2_SBK=0; //用示波器测得为12bit
while(!SCI0SR1_TDRE);
//发送同步场//
SCI0DRL = 0x55;
while(!SCI0SR1_TDRE);
//发送ID//
SCI0DRL = linframe->ID;
while(!SCI0SR1_TDRE);
SCI0CR2_RE = 1; //recevier enable
}
/*设置时钟 OSCCLK:16M,PLL:64M,busclock :32M*/
void MCUInit(void)
{
CLKSEL &= 0x7f;
PLLCTL &= 0xbf;//先关闭PLL
SYNR = 0x01; //对PLLCLK增频的因子
REFDV = 0x00; //对PLLCLK分频的因子
PLLCTL |= (1
|
|