首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
飞思卡尔™半导体(Freescale Semiconductor)
» SCI 中断发送问题???
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
SCI 中断发送问题???
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
1
#
打印
字体大小:
t
T
zhudongpo
发表于 2007-3-23 17:38
|
显示全部帖子
SCI 中断发送问题???
SCI
使用MC9S12DP256 ,用中断方式发送一串 数据
“0xf5 0xdd,0x03,0x00,0x04,0xff,0xff,0xff,0xfc,0x72,0x73,0xf5”
用串口助手看,隔一段时间就会发现发的数据不是
“0xf5 0xdd,0x03,0x00,0x04,0xff,0xff,0xff,0xfc,0x72,0x73,0xf5”
有丢数据或数据错的现象,请问中断发送方式应该注意些 什么?
收藏
分享
评分
回复
引用
订阅
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
2
#
zhudongpo
发表于 2007-3-26 16:53
|
显示全部帖子
#include
/* common defines and macros */
#include
/* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
/* ERROR code and STATUS definitions */
#define ERROR_OK 1
#define ERROR_ERROR 0
#define START_CYCLE 1
#define WAIT_CYCLE 0
// 2007-3-13
/*Global variables*/
unsigned char SCIIniTx;
unsigned char SCIString[13]={0xF5,0xDD,0x03,0x00,0x23,0x04,0xFF,0xFF,0xFC,0x72,0x73,0xF5,0xa};
//unsigned char SCIString[12]={'B','C','D','E','F','G','H','I','J','K','L','\0'};
unsigned char *SCIStringp;
unsigned char Stringcase;
unsigned char * g_pSci1TxHead = SCIString;
unsigned char * g_pSci1TxBufEnd = SCIString + 11;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 20 void SCI0_rx(void)
{
if (SCI0SR1 & 0x80)
{ /*If transmission flag is set*/
SCI0SR1;
//if(*(SCIStringp++) != '\0')
if (g_pSci1TxHead != g_pSci1TxBufEnd)
{
//if(*SCIStringp > 0xD)
//{ /*Avoid to change CR and LF characters*/
// SCI0DRL=*SCIStringp + Stringcase;
//}
//else{
g_pSci1TxHead++;
SCI0DRL= *SCIStringp++;;
//}
}
else
{
g_pSci1TxHead = SCIString;
SCIIniTx=START_CYCLE; /*Start new transmission cycle*/
SCI0CR2 &= 0x7F; /*Disable TDRE interrupt*/
}
}
if(SCI0SR1 & 0x20){ /*If reception flag is set*/
SCI0SR1;
if(SCI0DRL == 'U' || SCI0DRL == 'u'){
Stringcase = 0x00; /*Uppercase the character string*/
}
else if(SCI0DRL == 'L' || SCI0DRL == 'l'){
Stringcase = 0x20; /*Lowercase the character string*/
}
}
return;
}
#pragma CODE_SEG DEFAULT
//************************************************************************
// SCI参数设置
//************************************************************************
void Init_SCI(void)
{
//SCI0与Monitor通信
SCI0BDL=6;
SCI0BDH=0; //CLOCK=7.3728MHz, bps=38400
SCI0CR1=0x16; //9 bit, 偶效验
SCI0CR2=0x2C; //中止符产生器关闭
}
void SCITx(unsigned char SCIByte){
SCI0DRL = SCIByte; /*Write data byte to SCIDRL register*/
SCI0CR2 |= 0x80; /*Enable TDRE interrupt*/
}
void main(void)
{
/* put your own code here */
EnableInterrupts;
Init_SCI();
SCIIniTx = START_CYCLE; /*Initialize transmission cycle flag*/
for (;;)
{
if(SCIIniTx == START_CYCLE){
SCIIniTx = WAIT_CYCLE;
SCIStringp=SCIString; /*Set pointer to character string*/
SCITx(*SCIStringp + Stringcase);/*Send first byte of string*/
}
}
}
[此贴子已经被作者于2007-3-26 16:53:09编辑过]
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
3
#
zhudongpo
发表于 2007-3-26 16:57
|
显示全部帖子
上面代码是通过改动 AN2883SW.ZIP 。
发送数据时大部分时间是正确的,中间会出现错误数据帧。
使用是mc9s12dp256b ,PC端使用 串口调试助手V2.2.exe 接收数据。
麻烦Strongchen 给看看。谢谢了
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
4
#
zhudongpo
发表于 2007-3-26 18:06
|
显示全部帖子
http://bbs.eccn.com/uploadImages/SCI.rar
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
5
#
zhudongpo
发表于 2007-3-28 11:37
|
显示全部帖子
[upload=image/pjpeg]uploadImages/SCI.JPG[/upload]
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
6
#
zhudongpo
发表于 2007-3-28 11:54
|
显示全部帖子
SCI0CR1=0x12; 9bit
SCI0CR1=0x02; 8bit 串口助手接收的数据根本就是错的。。
数据格式为什么要选9位而不是8位的?是因为 使用了偶校验
我试过多种组合了,还是有问题,请问strongchen 如果串口助手的设置如上图所示,
SCI0CR1 应该怎么设置呢,还是除了SCI0CR1 之外别的控制寄存器也需要进行设置,
急切等待您的答复,谢谢。
[此贴子已经被作者于2007-3-28 11:54:41编辑过]
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
7
#
zhudongpo
发表于 2007-3-30 10:02
|
显示全部帖子
我试过将波特率降低为9600,还是有问题。
请问各位有什么方法吗,谢谢了。
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
8
#
zhudongpo
发表于 2007-3-31 14:36
|
显示全部帖子
strongchen 你好,你说数据长度并不包括校验位,SCI0CR1=0x06; //8 bit,
我已经试过了,收到数据是错误的,而SCI0CR1=0x16; //9 bit 收到数据才是正确的,
只是不停的发送过程中,我通过串口助手看到有一些错误的数据而已。用8bit 收到数据全错了。
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
9
#
zhudongpo
发表于 2007-3-31 14:39
|
显示全部帖子
[upload=image/pjpeg]uploadImages/SCI0.JPG[/upload]
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
10
#
zhudongpo
发表于 2007-3-31 14:43
|
显示全部帖子
SCI0CR1_M=0 ,我使用了偶校验,按照上图给的信息,BIT7 位应该是校验位吧,那数据位
不就只有7位了吗,而串口助手中数据位是8位呀,你认为能接收到正确的数据???
回复
引用
TOP
发短消息
加为好友
zhudongpo
当前离线
UID
126181
帖子
115
精华
0
积分
350
阅读权限
30
在线时间
0 小时
注册时间
2005-11-23
最后登录
2011-8-25
中级会员
UID
126181
性别
男
11
#
zhudongpo
发表于 2007-4-2 11:47
|
显示全部帖子
通讯软件中数据长度最大的确只有8,现在我的数据长度也是8位呀,虽然设置时9位,
但是校验位占了一位呀,数据位还是8位。所以在通讯软件中设置8位数据位应该没有
错误吧。关键是通讯软件接收的数据,开始可是正确的,经过一段时间就有错误数据
出现,SCI的设置项应该没有问题,那问题出在哪里呢? 您能给一个中断方式发送一段
数据的例程吗?我用的是 AN2883SW.ZIP 测试没有通过,您给修改了一下,经过测试
还是没有解决问题。还有什么地方需要注意,才能彻底解决出现的问题呢。
回复
引用
TOP
返回列表
模拟电路
ARM
电子制造
软件开发
DSP技术
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议