打印

我的串口发送中断标志不能清除

[复制链接]
4714|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ms|  楼主 | 2007-10-14 20:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的串口发送中断标志不能清除
我准备发送六个数,在主程序里发一个就不管了,发送完成进中断后在在中断服务程序里发送其它的五个。可是进了中断后我已经读了一下SCIS1,可是SCIS1_TDRE没有被清除,发送完六个后又自己进来了,于是它就发个不停,不知是怎么回事?
__interrupt void isrVscitx(void)
{

  if (SCIS1_TDRE) {
    SciTmp = SCIS1;
    SendDataTimes++;
    if (SendDataTimes >= 6) {
      PTBD_PTBD7 = 0;
      SendDataTimes = 0;
      return;
    }
    else {
      SCID = TimeSend[SendDataTimes];
    }
  }
}

相关帖子

沙发
张明峰| | 2007-10-14 21:22 | 只看该作者

能清除才怪呢

只要发送寄存器是空的,该标志就有效。这是硬件决定的,软件无法干预。
软件可以清除另外一个位,自己好好想想应该怎么做。

使用特权

评论回复
板凳
ms|  楼主 | 2007-10-14 21:54 | 只看该作者

中断允许位是可以软件清除的

嗯,知道了,中断允许位是可以软件清除的.
改了程序,中断里清除中断允许位就可以了.
谢教主!
__interrupt void isrVscitx(void)
{
  /* Write your interrupt code here ... */
  if (SCIS1_TDRE) {
    SciTmp = SCIS1;
    SCIC2_TIE = 0;
    SendDataTimes++;
    if (SendDataTimes >= 6) {
      PTBD_PTBD7 = 0;
      SendDataTimes = 0;
      return;
    }
    else {
      SCID = TimeSend[SendDataTimes];
      SCIC2_TIE = 1;
    }
  }
}

使用特权

评论回复
地板
张明峰| | 2007-10-14 21:59 | 只看该作者

应该是在全部发送完毕后关闭中断使能

上面的结构有点乱
把“SCIC2_TIE = 0;”搬到“if (SendDataTimes >= 6)”条件中可能更好。
__interrupt void isrVscitx(void)
{
  /* Write your interrupt code here ... */
  if (SCIS1_TDRE) {
    SciTmp = SCIS1;
    SendDataTimes++;
    if (SendDataTimes >= 6) {
      PTBD_PTBD7 = 0;
      SendDataTimes = 0;
      SCIC2_TIE = 0;
      return;
    }
    else {
      SCID = TimeSend[SendDataTimes];
      //SCIC2_TIE = 1;
    }
  }
}

使用特权

评论回复
5
ms|  楼主 | 2007-10-15 13:08 | 只看该作者

收到了,谢谢,脑袋一时没转过来。

使用特权

评论回复
6
张明峰| | 2007-10-15 19:21 | 只看该作者

要我写会是这样

中断:
__interrupt void isrVscitx(void)
{
  /* Write your interrupt code here ... */
  if (SCIS1_TDRE) {
    SCIS1;
    SCID = TimeSend[SendDataTimes++];
    if (SendDataTimes > 5) {
      PTBD_PTBD7 = 0;
      SendDataTimes = 0;
      SCIC2_TIE = 0;
    }
  }
}

启动发送:
      ...填入发送数据,然后
      SendDataTimes = 0;
      SCIC2_TIE = 1;

使用特权

评论回复
7
ms|  楼主 | 2007-10-17 09:03 | 只看该作者

我的心路历程

我的心路历程
以下是我看了程序后的思路

呵呵,教主也有糊涂的时候
在主程序里发送完第一个TimeSend[0]后进来中断的时候,你用SCID = TimeSend[SendDataTimes++]发送,这时SendDataTimes还是0,那它不是把TimeSend[0]又发送了一遍...
噢,慢着,
“启动发送:
      ...填入发送数据,然后
      SendDataTimes = 0;
      SCIC2_TIE = 1;

这里没提到发送TimeSend[0]呀?不发送怎么进发送中断,呵呵,教主也有糊涂的时候...
噢,慢着,

      SCIC2_TIE = 1;

这句话有**,允许中断,发送寄存器又是空的,这时不就立刻进了中断了,哈哈,妙啊!原来中断还可以这样进。

对于“++”的用法,你这样用确实比我的方法好得多,先用 再加 然后边界判断,比我的先加 然后边界判断 没问题再用要好得多,看懂了,学习了。

手册里说,当SCIS1_TDRE是1的时候要先读SCIS1再写数据到SCID,我读用的是SciTmp = SCIS1;,你读用的是SCIS1;这一招省了一个临时变量,你是从哪里知道的,我也想去那学学。

使用特权

评论回复
8
徐明明6624| | 2013-7-29 17:13 | 只看该作者
我用的是mc9s12xet256,中断向量表如下
#define VectorNumber_Vsi                119
#define VectorNumber_Vsyscall           118
#define VectorNumber_Vmpuaccesserr      117
#define VectorNumber_Vxsei              116
#define VectorNumber_VReserved115       115
#define VectorNumber_VReserved114       114
#define VectorNumber_VReserved113       113
#define VectorNumber_VReserved112       112
#define VectorNumber_VReserved111       111
#define VectorNumber_VReserved110       110
#define VectorNumber_VReserved109       109
#define VectorNumber_VReserved108       108
#define VectorNumber_VReserved107       107
#define VectorNumber_VReserved106       106
#define VectorNumber_VReserved105       105
#define VectorNumber_VReserved104       104
#define VectorNumber_VReserved103       103
#define VectorNumber_VReserved102       102
#define VectorNumber_VReserved101       101
#define VectorNumber_VReserved100       100
#define VectorNumber_VReserved99        99
#define VectorNumber_VReserved98        98
#define VectorNumber_Vatd1compare       97
#define VectorNumber_Vatd0compare       96
#define VectorNumber_VReserved95        95
#define VectorNumber_VReserved94        94
#define VectorNumber_VReserved93        93
#define VectorNumber_VReserved92        92
#define VectorNumber_VReserved91        91
#define VectorNumber_VReserved90        90
#define VectorNumber_VReserved89        89
#define VectorNumber_VReserved88        88
#define VectorNumber_VReserved87        87
#define VectorNumber_VReserved86        86
#define VectorNumber_VReserved85        85
#define VectorNumber_VReserved84        84
#define VectorNumber_VReserved83        83
#define VectorNumber_VReserved82        82
#define VectorNumber_VReserved81        81
#define VectorNumber_VReserved80        80
#define VectorNumber_VReserved79        79
#define VectorNumber_VReserved78        78
#define VectorNumber_Vxst7              77
#define VectorNumber_Vxst6              76
#define VectorNumber_Vxst5              75
#define VectorNumber_Vxst4              74
#define VectorNumber_Vxst3              73
#define VectorNumber_Vxst2              72
#define VectorNumber_Vxst1              71
#define VectorNumber_Vxst0              70
#define VectorNumber_Vpit3              69
#define VectorNumber_Vpit2              68
#define VectorNumber_Vpit1              67
#define VectorNumber_Vpit0              66
#define VectorNumber_Vhti               65
#define VectorNumber_Vapi               64
#define VectorNumber_Vlvi               63
#define VectorNumber_VReserved62        62
#define VectorNumber_Vsci5              61
#define VectorNumber_Vsci4              60
#define VectorNumber_Vsci3              59
#define VectorNumber_Vsci2              58
#define VectorNumber_Vpwmesdn           57
#define VectorNumber_Vportp             56
#define VectorNumber_Vcan4tx            55
#define VectorNumber_Vcan4rx            54
#define VectorNumber_Vcan4err           53
#define VectorNumber_Vcan4wkup          52
#define VectorNumber_VReserved51        51
#define VectorNumber_VReserved50        50
#define VectorNumber_VReserved49        49
#define VectorNumber_VReserved48        48
#define VectorNumber_VReserved47        47
#define VectorNumber_VReserved46        46
#define VectorNumber_VReserved45        45
#define VectorNumber_VReserved44        44
#define VectorNumber_Vcan1tx            43
#define VectorNumber_Vcan1rx            42
#define VectorNumber_Vcan1err           41
#define VectorNumber_Vcan1wkup          40
#define VectorNumber_Vcan0tx            39
#define VectorNumber_Vcan0rx            38
#define VectorNumber_Vcan0err           37
#define VectorNumber_Vcan0wkup          36
#define VectorNumber_Vflash             35
#define VectorNumber_Vflashfd           34
#define VectorNumber_Vspi2              33
#define VectorNumber_Vspi1              32
#define VectorNumber_Viic0              31
#define VectorNumber_Vsci6              30
#define VectorNumber_Vcrgscm            29
#define VectorNumber_Vcrgplllck         28
#define VectorNumber_Vectpabovf         27
#define VectorNumber_Vectmdcu           26
#define VectorNumber_Vporth             25
#define VectorNumber_Vportj             24
#define VectorNumber_Vatd1              23
#define VectorNumber_Vatd0              22
#define VectorNumber_VSCI5              21
#define VectorNumber_Vsci0              20
#define VectorNumber_Vspi0              19
#define VectorNumber_Vectpaie           18
#define VectorNumber_Vectpaaovf         17
#define VectorNumber_Vectovf            16
#define VectorNumber_Vectch7            15
#define VectorNumber_Vectch6            14
#define VectorNumber_Vectch5            13
#define VectorNumber_Vectch4            12
#define VectorNumber_Vectch3            11
#define VectorNumber_Vectch2            10
#define VectorNumber_Vectch1            9
#define VectorNumber_Vectch0            8
#define VectorNumber_Vrti               7
#define VectorNumber_Virq               6
#define VectorNumber_Vxirq              5
#define VectorNumber_Vswi               4
#define VectorNumber_Vtrap              3
#define VectorNumber_Vcop               2
#define VectorNumber_Vclkmon            1
#define VectorNumber_Vreset             0

串口0只有一个中断VectorNumber_Vsci0,不知道是发送中断还是接收中断,怎么用?

使用特权

评论回复
9
pyh921| | 2013-8-5 11:58 | 只看该作者
老贴都被挖出来了……
可以判断标志为来判断是发送还是接收

使用特权

评论回复
10
徐明明6624| | 2013-8-7 09:35 | 只看该作者
嗯 现在知道了 因为第一次用飞思卡尔单片机 有很多问题

使用特权

评论回复
11
wangwei707707| | 2013-10-9 20:56 | 只看该作者
我也遇到了一个问题,我已经实现两个单片机主从中断收发,但是反过来就不行了。就是从机在接收到主机发送的数据后,判断无误后,回发一个数据到主机,主机不能实现接收,就是从机还没有发呢,主机就一直进入中断,求解????????

使用特权

评论回复
12
wangwei707707| | 2013-10-9 20:58 | 只看该作者
主机,从机收发都是用中断,现在的问题是主机还没有收到从机发来的数据,就一直进入中断,这是为什么呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

ms

3

主题

31

帖子

0

粉丝