4629|1

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

McBSP中断方式,中断不响应? [复制链接]

我用的c5402,中断方式从MCBSP口收发数据,但是中断程序不响应,请求高手指点一下。
程序如下:
头文件
typedef unsigned int u16;
typedef signed int s16;


#define SPSA_ADDR(port)        (port ? 0x48 : 0x38)
#define SPSD_ADDR(port)        (port ? 0x49 : 0x39)

#define DRR2_ADDR(port)        (port ? 0x40 : 0x20)
#define DRR1_ADDR(port)        (port ? 0x41 : 0x21)
#define DXR2_ADDR(port)        (port ? 0x42 : 0x22)
#define DXR1_ADDR(port)        (port ? 0x43 : 0x23)

#define MCBSP_ACCSUB_ADDR(port) (port ? 0x49 : 0x39)

#define SPCR1_SUBADDR    0x00
#define SPCR2_SUBADDR    0x01
#define RCR1_SUBADDR    0x02
#define RCR2_SUBADDR    0x03
#define XCR1_SUBADDR     0x04
#define XCR2_SUBADDR    0x05
#define SRGR1_SUBADDR    0x06
#define SRGR2_SUBADDR    0x07
#define MCR1_SUBADDR    0x08
#define MCR2_SUBADDR    0x09
#define RCERA_SUBADDR    0x0A
#define RCERB_SUBADDR    0x0B
#define XCERA_SUBADDR    0x0C
#define XCERB_SUBADDR    0x0D
#define PCR_SUBADDR        0x0E

#define       bsp_SPCR11        0x0000
#define     bsp_SPCR21        0x0000
#define        bsp_PCR1        0x0a00
#define     bsp_RCR11        0x0040
#define        bsp_RCR21        0x0041
#define        bsp_XCR11        0x0040
#define        bsp_XCR21        0x0041
#define        bsp_SRGR11        0x0009
#define     bsp_SRGR21        0x30f9
#define        bsp_MCR11        0x0000
#define     bsp_MCR21        0x0000


#define   reg_ST1        0x0007
#define      PMST        0x001D
#define      SWWSR        0x0028
#define      SWCR        0x002B
#define      BSCR        0x0029
#define     CLKMD        0x0058
#define     IMR         0x0000
#define     IFR         0x0001
#define PMST_VAL        0x00A0  //interupt vectors from 0x80 
#define SWWSR_VAL       0x7fff 
#define SWCR_VAL        0x0001 
#define BSCR_VAL        0x8802
#define CLKMD_VAL        0xf007
volatile char *LINE_ADDR = (volatile char*)0x4000;

初始化文件:
void init_board(void)
{
    unsigned int i;
                                                                                                                                
    *(volatile u16 *)CLKMD = 0x0000;
    while(*(volatile u16 *)CLKMD & 0x0001){};
    *(volatile u16 *)CLKMD = CLKMD_VAL;
   
    *(volatile u16 *)PMST = PMST_VAL;
    *(volatile u16 *)SWWSR =SWWSR_VAL;
    *(volatile u16 *)SWCR  =SWCR_VAL;
    *(volatile u16 *)BSCR  =BSCR_VAL;  
    asm(" SSBX INTM"); 
    *(volatile u16 *)SPSA_ADDR(1)=SPCR1_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_SPCR11;
    *(volatile u16 *)SPSA_ADDR(1)=SPCR2_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_SPCR21;
    *(volatile u16 *)SPSA_ADDR(1)=RCR1_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_RCR11;
    *(volatile u16 *)SPSA_ADDR(1)=RCR2_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_RCR21;
    *(volatile u16 *)SPSA_ADDR(1)=XCR1_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_XCR11;
    *(volatile u16 *)SPSA_ADDR(1)=XCR2_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_XCR21;
    *(volatile u16 *)SPSA_ADDR(1)=SRGR1_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_SRGR11;
    *(volatile u16 *)SPSA_ADDR(1)=SRGR2_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_SRGR21;
    *(volatile u16 *)SPSA_ADDR(1)=MCR1_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_MCR11;
    *(volatile u16 *)SPSA_ADDR(1)=MCR2_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_MCR21;
    *(volatile u16 *)SPSA_ADDR(1)=PCR_SUBADDR; 
    *(volatile u16 *)SPSD_ADDR(1)=bsp_PCR1;
   
    *(volatile u16 *)SPSA_ADDR(1)=SPCR2_SUBADDR;  //启动采样率发生器
    *(volatile u16 *)SPSD_ADDR(1)|=0x0040;
   
    *(volatile u16 *)SPSA_ADDR(1)=SPCR2_SUBADDR;  //启动帧同步
    *(volatile u16 *)SPSD_ADDR(1)|=0x0080;
   
    *(volatile u16 *)SPSA_ADDR(1)=SPCR2_SUBADDR;  //启动发送器
    *(volatile u16 *)SPSD_ADDR(1)|=0x0001;
   
    *(volatile u16 *)SPSA_ADDR(1)=SPCR1_SUBADDR;  //启动接受器
    *(volatile u16 *)SPSD_ADDR(1)=0x0001;
   
    *(volatile u16 *)IMR=0x0000;
    *(volatile u16 *)IFR=0x3FFF;
    *(volatile u16 *)IMR=0x3FFF;
   
     asm(" RSBX INTM");
   
    for(i=0;i<80;i++)
    {
      LINE_ADDR=0x0;
    }
   
}

ASM文件:
        .sect ".vectors"

        .ref _c_int00
       
        .global _McBSP_brint1          

        .align  0x80           

RESET:                         
        BD     _c_int00                            
        STM    #128, SP                            
nmi:    RETE                   
                NOP
                NOP
                NOP
int0:RETE
         NOP
         NOP
         NOP
int1:RETE
         NOP
         NOP
         NOP
int2:RETE
         NOP
         NOP
         NOP
tint0:RETE
         NOP
         NOP
         NOP
brint0:RETE
         NOP
         NOP
         NOP
bxint0:RETE
         NOP
         NOP
         NOP
DMAC0:RETE
         NOP
         NOP
         NOP
tint1:RETE
         NOP
         NOP
         NOP
int3:RETE
         NOP
         NOP
         NOP
hpint:RETE
         NOP
         NOP
         NOP
brint1:B _McBSP_brint1
         NOP
         NOP
bxint1:RETE
         NOP
         NOP
         NOP
DMAC4:RETE
         NOP
         NOP
         NOP
DMAC5:RETE
         NOP
         NOP
         NOP                                    
       .end

CMD文件:
MEMORY
{
    PAGE 0:    
                VECS(RXI):  origin=0x80,     length=0x0080
                PROG(RWXI): origin=0x100,      length=0x2000

    PAGE 1:       DATA(RWI):    origin=0x2000,    length=0x2000
}   

SECTIONS
{
    .text    {} >    PROG    PAGE 0
    .cinit    {} >    PROG    PAGE 0
    .pinit    {} >     PROG    PAGE 0
    .vectors{} >    VECS    PAGE 0
    .stack    {} >     DATA    PAGE 1
    .bss    {} >    DATA    PAGE 1
    .const    {} >    DATA    PAGE 1
    .switch {} >     DATA    PAGE 1
    .sysmem {} >    DATA     PAGE 1
    .cio    {} >    DATA    PAGE 1
    .far    {} >    DATA    PAGE 1
}

主程序:
#include "agc_face.h"
#include "agc_func.h"
 
const s16 cWriteBuffer[16]={
    0x000a,0x2201,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
    0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f   
    };   
s16 RdBuffer[16],WrBuffer[16];
s16 dIn,dOut;
s16 intDataIn;
s16  Read_BSP1(void);
void Write_BSP1(s16);
void Led_Light(void);
int  AGC_audio(int);
void Write_dpram(void);
interrupt void McBSP_brint1();

void main()
{    
    int cnt0=0;

    init_board();

    while (1)
    {           

       dOut=cWriteBuffer[cnt0];            
       Write_BSP1(dOut);
//       dIn=Read_BSP1();
//       RdBuffer[cnt0]=dIn;
//       LINE_ADDR[cnt0]=RdBuffer[cnt0]&0xFF;
       if(cnt0>=15)cnt0=0;     
       cnt0++;
            
       Led_Light();
       }
}

interrupt void McBSP_brint1()  //中断方式读取数据
{
     asm(" SSBR  INTM"); 
     intDataIn=*(volatile u16*)DRR1_ADDR(1);
     asm(" RSBR  INTM");
}

s16 Read_BSP1(void)   //查询方式读取数据
{
    s16 dDataIn;
    *(volatile u16 *)SPSA_ADDR(1)=SPCR1_SUBADDR;  //Receive Data from McBSP1
    while(!((*(volatile u16 *)SPSD_ADDR(1)) & 0x0002)){};
    dDataIn=*(volatile u16*)DRR1_ADDR(1);
   
    return dDataIn;
}

void Write_BSP1(s16 dDataOut)
{
    *(volatile u16 *)SPSA_ADDR(1)=SPCR2_SUBADDR;  //Transmit Data To McBSP1
    while(!((*(volatile u16 *)SPSD_ADDR(1)) & 0x0002)){};
    *(volatile u16 *)DXR1_ADDR(1)=dDataOut;
}

void Led_Light(void)
{
    static int i=0;
    if(i>1024)
    {
    //    *(int *)(0x0007)^=0x2000;
        *(volatile u16 *)reg_ST1 ^= 0x2000;   //Every 1024 times XF changed
        i=0;
    }
    i++;
}


发送数据采用查询方式发送cWriteBuffer中的数据,采用中断方式读回数据,收DR与DX自环,程序一直不响应中断,请高手帮忙看看,谢谢

最新回复

还不明白,也需要用,来看看  详情 回复 发表于 2013-12-26 15:39
点赞 关注
 

回复
举报

20

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
还不明白,也需要用,来看看
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表