打印

sci的发送中断服务程序进不了

[复制链接]
8451|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianwen_4524|  楼主 | 2013-4-15 16:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "DSP28_Device.h"
void InitPieCtrl(void);
void InitPieVectTable(void);
interrupt void TX_ISR(void);
//interrupt void RX_ISR(void);
Uint16 Send_Flag,RX_dat[100],i,j,TX_dat[100];
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE中断*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();

/*初始化SCIA寄存器*/
    InitSci();
    for(i = 0; i < 100; i++)
    {
     RX_dat=0;
     TX_dat=i;
}
    i = 0;
    j = 0;
    Send_Flag = 0;
   
    EALLOW;
    PieVectTable.TXAINT=&TX_ISR;
//    PieVectTable.RXAINT=&RX_ISR;
    EDIS;
   
//    PieCtrl.PIEIER9.bit.INTx1=1;
    PieCtrl.PIEIER9.bit.INTx2=1;
    IER=IER|0x0100;
    EINT;
while(1)
{
// if(SciaRegs.SCICTL2.bit.TXRDY==1&&Send_Flag==1)
// { SciaRegs.SCITXBUF=RX_dat;
//  i++;
//  Send_Flag=0;
//  if(i==j)
//  { i=0;
//   j=0;
//  }
//  if(i==100)
//   i=0;
//
// }

;
}
}  
interrupt void TX_ISR(void)
{
// PieCtrl.PIEIER9.bit.INTx1=0;

SciaRegs.SCITXBUF=RX_dat;
i++;
if(i==100)
{
  PieCtrl.PIEIER9.bit.INTx2=0;
}
PieCtrl.PIEACK.bit.ACK9=1;
// PieCtrl.PIEIER9.bit.INTx1=1;
}
//interrupt void RX_ISR(void)
//{
// RX_dat[j]=SciaRegs.SCIRXBUF.all;
// Send_Flag=1;
// j++;
// if(j==2)
//  j=0;
// PieCtrl.PIEACK.bit.ACK9=1;
//}
首先SCI的接收中断服务程序可以正常进入执行,同时,也可以通过判断SciaRegs.SCICTL2.TXRDY==1来发送数据,在串口接收窗口中能正常显示发送的数据,但就是进不去发送中断服务程序中,请求帮忙???拜托兄弟们和版主们,给点意见,万分感谢!!!!!

相关帖子

沙发
tianwen_4524|  楼主 | 2013-4-16 09:33 | 只看该作者
怎么没一个声音

使用特权

评论回复
板凳
tianwen_4524|  楼主 | 2013-4-16 15:12 | 只看该作者

使用特权

评论回复
地板
tianwen_4524|  楼主 | 2013-4-16 18:00 | 只看该作者
没一个人知道呢??还是问题太简单??还是问题解释得不明白??都说下喂,兄弟,版主。。。

使用特权

评论回复
5
tianwen_4524|  楼主 | 2013-4-17 10:01 | 只看该作者

使用特权

评论回复
6
tianwen_4524|  楼主 | 2013-4-17 10:01 | 只看该作者
究竟为什么没人的呢???

使用特权

评论回复
7
tianwen_4524|  楼主 | 2013-4-17 17:20 | 只看该作者
究竟为什么没人的呢???

使用特权

评论回复
8
ggzzc| | 2013-4-19 07:09 | 只看该作者
发送TXENA使能,从SCITXBUF向TXSHF赋值使得TXRDY=1,表明SCITXBUF可以接受新的值,如果发送中断TX INT ENA使能,则数据的转移产生中断,而向SCITXBUF赋值将清零TXRDY。试着向SCITXBUF赋个值呢。

使用特权

评论回复
9
tianwen_4524|  楼主 | 2013-4-24 10:56 | 只看该作者
ggzzc 发表于 2013-4-19 07:09
发送TXENA使能,从SCITXBUF向TXSHF赋值使得TXRDY=1,表明SCITXBUF可以接受新的值,如果发送中断TX INT ENA ...

首先非常感谢这位兄台的回答。我也赋值给TXBUF了(即在初始化后SciaRegs.SCIATXBUF=a),但还是进不去中断,但却是紧紧进不去中断,但又可以通过查询方式将数据发送出去(即通过判断SciaRegs.SCIACTL2.BIT.TXRDY==1),同时接收的中断服务程序又能正常进入。

使用特权

评论回复
10
tianwen_4524|  楼主 | 2013-4-26 14:07 | 只看该作者

使用特权

评论回复
11
tianwen_4524|  楼主 | 2013-5-30 17:06 | 只看该作者
怎么没人回答了呢????我试了几次,在标准模式下,怎么也进不去发送中断中去。但在FIFO模式就可以。
要不这样,谁可以给个例子我,拜托,我是新手,希望高手们能帮帮忙,将万分感谢。。。。。。。。。。。。。。。。。。。。。。。。

使用特权

评论回复
12
528388812| | 2013-5-30 17:56 | 只看该作者

使用特权

评论回复
13
zhangmangui| | 2013-5-30 17:58 | 只看该作者
tianwen_4524 发表于 2013-5-30 17:06
怎么没人回答了呢????我试了几次,在标准模式下,怎么也进不去发送中断中去。但在FIFO模式就可以。
要 ...

void InitSci(void)
{
        // Initialize SCI-A:
       
        EALLOW;
        GpioMuxRegs.GPFMUX.all = 0x0030;
        EDIS;
    SciaRegs.SCIFFTX.bit.SCIRST=0; //复位SCI的发送和接收通道
        /* loopback   8 bit data */
        SciaRegs.SCICCR.all = 0x07;        // 1 bit stop, disable parity, idle mode, 8 bits data
                                    //一个停止位,奇校验,奇偶校验禁止,自测试模式禁止,空闲位模式协议选择,字符长度为8位
                                                                //地址位模式在帧中增加了一个附加位,空闲线模式常用于正常通信
        SciaRegs.SCICTL1.all = 0x03; // 发送器使能,接收器使能
                                    //接收错误中断禁止,SCI复位,无唤醒模式,睡眠模式禁止
//        SciaRegs.SCICTL2.all = 0x03; //使能RXRDY/BRKDT中断,使能TXRDY中断
    SciaRegs.SCIFFTX.bit.SCIFFENA=1;  //使能SCI FIFO增强功能
    SciaRegs.SCIFFTX.bit.TXFFILIL=0;  //设置发送FIFO中断等级位
    SciaRegs.SCIFFRX.bit.RXFFIL=4;    //设置接收FIFO中断等级位,匹配中断
    SciaRegs.SCIFFRX.bit.RXFFIENA=1;  // 禁止SCIA FIFO接收中
        SciaRegs.SCIFFTX.bit.TXFFIENA=0;  // 禁止SCIA FIFO发送中
    SciaRegs.SCIFFTX.bit.TXINTCLR=1;  //清除中断标志位
        SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志位
        ////////////////////9600///19200/////
//        SciaRegs.SCIHBAUD = 0x00;//0x01;//0x00;
//        SciaRegs.SCILBAUD = 0xF3;//0x44;//0xa2;
       
//        SciaRegs.SCICTL1.all = 0x23;//SCI退出复位
       
       
       
        //tbd...
        //退出复位状态
    SciaRegs.SCICTL1.bit.SWRESET=1;
        SciaRegs.SCIFFTX.bit.SCIRST=1;
        // Initialize SCI-B:

        //tbd...
}
interrupt void SCIRXINTA_ISR(void)     // SCI-A
{
        unsigned char i;           //ReceivedAChar;
        DINT;//关闭总中断

           // 数据接收
           //temp=SciaRegs.SCIFFRX.bit.RXFIFST;         //数据长度
    for(i=0;i<5;i++)
        {
                Receviced_data = SciaRegs.SCIRXBUF.all;
                //ReceivedAChar = SciaRegs.SCIRXBUF.all;
                //Receviced_data = ReceivedAChar;     //接收串口数据
                Receviced_data[4] = '\0';
        }
          
        flag=1;                                  //表示接受完成
        SciaRegs.SCIFFRX.bit.RXFIFORESET=0;      //将FIFO指针复位为0
        for(i=0;i<20;i++); //延时
        SciaRegs.SCIFFRX.bit.RXFIFORESET=1;      //退出复位状态
           SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;     // 清除接收中断标志
    SciaRegs.SCIFFRX.bit.RXOVF_CLR = 1;      //清除溢出中断标志
        PieCtrl.PIEACK.all |= M_INT9;            //响应中断
        EINT;   //开总中断
}

interrupt void SCITXINTA_ISR(void)     // SCI-A
{
        unsigned char ReceivedAChar;
        DINT;//关闭总中断
       
        //自动侦测波特率处理
        if(SciaRegs.SCIFFCT.bit.ABD == 1)
           {
            SciaRegs.SCIFFCT.bit.ABDCLR = 1; //清除ABD
              SciaRegs.SCIFFCT.bit.CDC = 0; //禁止自动波特率侦测
              ReceivedAChar = SciaRegs.SCIRXBUF.all;
                SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志位
                SciaRegs.SCIFFRX.bit.RXFIFORESET=0; //将FIFO指针复位为0
                SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //退出复位状态
              if(ReceivedAChar == 'A')
                {        
                        Send_String_SCIA("right!");//        Autobaud
                        SciaRegs.SCIFFRX.bit.RXFFIENA = 1;// 使能SCIA FIFO接收中断
                        connect_right = 1;
                }       
              else
              {
                      Send_String_SCIA("wrong!");  //        Autobaud
                        connect_right = 0;
                }
           }
       
        SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志位
        PieCtrl.PIEACK.all |= M_INT9;   //响应中断
        EINT;   //开总中断
}

参考一下  不行了告诉我

使用特权

评论回复
14
tianwen_4524|  楼主 | 2013-5-31 09:35 | 只看该作者
zhangmangui 发表于 2013-5-30 17:58
void InitSci(void)
{
        // Initialize SCI-A:

非常感谢,    SciaRegs.SCIFFTX.bit.SCIFFENA=1;  //使能SCI FIFO增强功能
                     SciaRegs.SCIFFTX.bit.TXFFILIL=0;  //设置发送FIFO中断等级位
不过我的意思是,在SCIFFENA=0时(即在标准模式中),进入TX中断的服务程序里,在SCIFFENA=1,(FIFO模式中),我的代码也已能进入TX中断!!!!!!有在标准模式中,进入TX中断的服务程序的例子吗?????????

使用特权

评论回复
15
tianwen_4524|  楼主 | 2013-5-31 11:51 | 只看该作者

使用特权

评论回复
16
zhangmangui| | 2013-6-1 10:32 | 只看该作者
tianwen_4524 发表于 2013-5-31 09:35
非常感谢,    SciaRegs.SCIFFTX.bit.SCIFFENA=1;  //使能SCI FIFO增强功能
                     ...

SCI不用FIFO的我没试过  

使用特权

评论回复
17
tianwen_4524|  楼主 | 2013-6-3 09:43 | 只看该作者
zhangmangui 发表于 2013-6-1 10:32
SCI不用FIFO的我没试过

谢谢。。。

使用特权

评论回复
18
tianwen_4524|  楼主 | 2013-8-21 16:50 | 只看该作者
等待。。。知道的,记得我在等你。。。

使用特权

评论回复
19
HD21425| | 2013-8-30 22:05 | 只看该作者
SCITXBUF向TXSHF赋值使得TXRDY=1,也就是说你想通过发送中断发送一串数据,首先要先发送一个数据来启动发送中断,然后在发送中断里发送剩下的数据。这个启动很重要!

使用特权

评论回复
20
HD21425| | 2013-8-30 22:07 | 只看该作者
上面的“发送一个数据来启动发送中断”意思是:你先要给SCITXBUF赋一个值,这样SCITXBUF会发送给TXSHF,然后TXRDY=1,然后就会进入中断

使用特权

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

本版积分规则

41

主题

236

帖子

0

粉丝