linzidong 发表于 2010-12-10 11:23:03

三星单片机9488串口接收中断问题

s3c9488作为主机串口接收数据后进不了中断!但串口发送数据的话从机正常接收进入中断,从机为stc单片机,波特率9600,8位数据位,无检验位。
如果不用中断方式,在主函数检测接收中断标志位是正常的,这样应该可以确定串口能正常的接收到数据了。但由于各方面问题,必须用中断来处理。
如果使能接收中断,就不能进入中断了(调试中感觉程序是有发生过中断的,就是不知道跑到那里去了。),连在主程序检测标志位也不行了.程序中我用LED灯调试,只要进入中断服务程序就点亮LDE灯,LED一直没亮!
另外有一个问题,9488说明书说只有一个中断向量,但#include<ioS3C9488.h>的头文件对中断向量的宏定义却是这样的??
#define __TIMERA_MATCH_vector            0x00
#define __TIMERA_OVERFLOW_vector         0x00
#define __TIMERB_UNDERFLOW_vector          0x00
#define __P33INT_vector                  0x00
#define __P34INT_vector                  0x00
#define __P35INT_vector                  0x00
#define __P36INT_vector                  0x00
#define __WATCH_TIMER_vector               0x00
#define __UART_TX_vector                   0xFA(应该不是我的头文件有误吧)
#define __UART_RX_vector                   0xFC(应该不是我的头文件有误吧)
这样看的话应该不只一个中断向量啊(这样如果程序要用两个中断的话应该如何编写中断服务程序),但即使我把最后两个都改成0x00问题也得不到解决(反而会出现死机的情况)。
我的程序大概是这样子的,为了方便那位大侠帮我看看,简单点如下:
//串口初始化
UARTCON=0x52; //8bit UART,Serial data rec en,parity error dis,end rec int,tx int dis
BRDATAL=0x33;BRDATAH=0x00; //9200HZ
UARTPND=0x00;
P3CONL=0x60; //P32 TXD OUTPUT; P31 INPUT WHIT PULL-UP,RXD INPUT
asm("EI");
//中断服务程序及中断向量
#pragma vector=__UART_RX_vector
__interrupt void UART_RX()
{//从机一直发送数据
点亮LED灯

其实程序中我还有另外一个定时器中断的,单独开的话是正常的,两个中断一起开就不正常了。为了排除问题,我先把定时器中断关了,服务程序也删除。
那位大侠帮忙想想是什么问题,我已经折腾好几天了。快顶不住了!
备注:主机为5v供电,从机为3.3v供电,主机发送脚串上330欧,但这个应该不是问题吧。cmos电平的!
另外,如果我的程序要用到一个定时器中断和一个串口接收中断,服务程序应该怎么写呢?因为现在都不知道中断向量是不是一样的。

shja995 发表于 2010-12-13 14:36:16

9488只有1个中断入口,所有vector都应该是0x00,进入中断后判断相应标志位决定处理哪段程序,串口接收中断是判断UARTPND的bit1
(注意每次中断后要手动清除这个位)。

cookzheng 发表于 2010-12-15 12:35:12

电话联系82138015 刘工或者13316866537
页: [1]
查看完整版本: 三星单片机9488串口接收中断问题