tianwen_4524 发表于 2013-4-15 16:46

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

#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,i,j,TX_dat;
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=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

没一个人知道呢??还是问题太简单??还是问题解释得不明白??都说下喂,兄弟,版主。。。

tianwen_4524 发表于 2013-4-17 10:01

tianwen_4524 发表于 2013-4-17 10:01

究竟为什么没人的呢???

tianwen_4524 发表于 2013-4-17 17:20

究竟为什么没人的呢???

ggzzc 发表于 2013-4-19 07:09

发送TXENA使能,从SCITXBUF向TXSHF赋值使得TXRDY=1,表明SCITXBUF可以接受新的值,如果发送中断TX INT ENA使能,则数据的转移产生中断,而向SCITXBUF赋值将清零TXRDY。试着向SCITXBUF赋个值呢。

tianwen_4524 发表于 2013-4-24 10:56

ggzzc 发表于 2013-4-19 07:09 static/image/common/back.gif
发送TXENA使能,从SCITXBUF向TXSHF赋值使得TXRDY=1,表明SCITXBUF可以接受新的值,如果发送中断TX INT ENA ...

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

tianwen_4524 发表于 2013-4-26 14:07

tianwen_4524 发表于 2013-5-30 17:06

怎么没人回答了呢????我试了几次,在标准模式下,怎么也进不去发送中断中去。但在FIFO模式就可以。
要不这样,谁可以给个例子我,拜托,我是新手,希望高手们能帮帮忙,将万分感谢。。。。。。。。。。。。。。。。。。。。。。。。

528388812 发表于 2013-5-30 17:56

zhangmangui 发表于 2013-5-30 17:58

tianwen_4524 发表于 2013-5-30 17:06 static/image/common/back.gif
怎么没人回答了呢????我试了几次,在标准模式下,怎么也进不去发送中断中去。但在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 = '\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;   //开总中断
}

参考一下不行了告诉我

tianwen_4524 发表于 2013-5-31 09:35

zhangmangui 发表于 2013-5-30 17:58 static/image/common/back.gif
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中断的服务程序的例子吗?????????

tianwen_4524 发表于 2013-5-31 11:51

zhangmangui 发表于 2013-6-1 10:32

tianwen_4524 发表于 2013-5-31 09:35 static/image/common/back.gif
非常感谢,    SciaRegs.SCIFFTX.bit.SCIFFENA=1;//使能SCI FIFO增强功能
                     ...

SCI不用FIFO的我没试过

tianwen_4524 发表于 2013-6-3 09:43

zhangmangui 发表于 2013-6-1 10:32 static/image/common/back.gif
SCI不用FIFO的我没试过

谢谢。。。

tianwen_4524 发表于 2013-8-21 16:50

等待。。。知道的,记得我在等你。。。

HD21425 发表于 2013-8-30 22:05

SCITXBUF向TXSHF赋值使得TXRDY=1,也就是说你想通过发送中断发送一串数据,首先要先发送一个数据来启动发送中断,然后在发送中断里发送剩下的数据。这个启动很重要!

HD21425 发表于 2013-8-30 22:07

上面的“发送一个数据来启动发送中断”意思是:你先要给SCITXBUF赋一个值,这样SCITXBUF会发送给TXSHF,然后TXRDY=1,然后就会进入中断
页: [1] 2
查看完整版本: sci的发送中断服务程序进不了