C6726系列DSP外部中断的实现.docx

上传人:b****7 文档编号:24049750 上传时间:2023-05-23 格式:DOCX 页数:11 大小:585.28KB
下载 相关 举报
C6726系列DSP外部中断的实现.docx_第1页
第1页 / 共11页
C6726系列DSP外部中断的实现.docx_第2页
第2页 / 共11页
C6726系列DSP外部中断的实现.docx_第3页
第3页 / 共11页
C6726系列DSP外部中断的实现.docx_第4页
第4页 / 共11页
C6726系列DSP外部中断的实现.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C6726系列DSP外部中断的实现.docx

《C6726系列DSP外部中断的实现.docx》由会员分享,可在线阅读,更多相关《C6726系列DSP外部中断的实现.docx(11页珍藏版)》请在冰豆网上搜索。

C6726系列DSP外部中断的实现.docx

C6726系列DSP外部中断的实现

C672x系列中断实现流程

TIC6727没有提供专门的外部中断引脚,使用McASPAMUTEIN引脚作为外部中断引脚,利用McASP的AMUTEiN事件触发dMAX,使dMAX产生相应的中断递交给CPU(可用中断:

INT9,INT10,INT11,INT12,INT13,INT15)。

以下为配置该中断的步骤及每步所要编的程序,同时又给出了每步所要配置的寄存器在数据手册中的说明。

一、配置CFGMCASPx寄存器,选择AMUTEINx引脚

#defineCFGMCASP0((int*)0x40000018)

#defineAXR70xFFFFFFF8

*CFGMCASP0=(*CFGMCASP0&AXR7)|0x00000001;

二、将上一步选择的相应管脚配置为GPIO输入引脚

#definePFUNC((int*)0x44000010)

#definePDIR((int*)0x44000014)

#definePOUT((int*)0x44000018)

#definePDIN((int*)0x4400001C)

#definePDSET((int*)0x4400001C)

#definePDCLR((int*)0x44000020)

#defineINTERUPT0xFFFFFF7F

*PDIR=(*PDIR&INTERUPT)|0x0;

*PFUNC=(*PFUNC&INTERUPT)|0x00000080;

三、在相应McASP模块中,禁止AMUTEIN信号驱动AMUTE输出,通过将AMUTE寄存器的INEN位清“0”来实现:

#defineAMUTE((int*)0x44000048)

#defineINEN0xFFFFFFFB

*AMUTE=(*AMUTE&INEN)|0x0;

四、配置dMAX

1)配置DEPR寄存器,选择上升沿或下降沿触发

2)配置DEHPR或DELPR寄存器,选择高优先级或低优先级

3)配置EVENTENTRY,选择中断号,将其保存在对应的Param位置

4)配置DEER寄存器,使能相应的dMAX事件

5,配置中断(SPRU733A)

以下为在数据手册中找到的dMAX的各个寄存器的地址,以及各个寄存器内部的说明:

.

(1)

#defineDEPR((int*)0x60000008)

#defineRISEING0X0

*DEPR=(*DEPR&RISEING|0xFFFFFFFF;

(2)

#defineDEHPR((int*)0x60000014

#definePRIORITY0X0

*DEHPR=(*DEHPR&PRIORITY|0xFFFFFFFF;

(3)配置EVENTENTRY,选择中断号,将其保存在对应的Param位置

(4)

#defineDEPR*(int*)0x60000008

#defineDEER*(int*)0x6000000C

#defineDEDR*(int*)0x60000010

#defineDEHPR*(int*)0x60000014

#defineDELPR*(int*)0x60000018

#defineDEFR*(int*)0x6000001C

#defineDER0*(int*)0x60000034

#defineDER1*(int*)0x60000054

#defineDER2*(int*)0x60000074

#defineDER3*(int*)0x60000094

#defineDFSR0*(int*)0x60000040

#defineDFSR1*(int*)0x60000060

#defineDTCR0*(int*)0x60000080

#defineDTCR1*(int*)0x600000A0

#defineMAX0_EVENT_TABLE0x61008000

#defineEVENT26(*(int*)(MAX0_EVENT_TABLE+26*4))

#defineEVENT26_PARA0x00060007

voidinitdMAX(void)

{

EVENT26=EVENT26_PARA;

DEPR|=0x04000000;

DEHPR|=0x04000000;

DEER|=0x04000000;

}

五配置中断(SPRU733A)

修改中断向量表,将相应中断的跳转地址改为对应的中断服务程序(也可通过程序实现),然后使能相应中断:

1)禁止全局中断CSR.GIE=0

2)使能相应中断IER.IEn=1

3)使能NMI中断IER.NMIE=1

4)使能全局中断CSR.GIE=1

下表为C672x系列DSP中各个中断的的意义,

中断向量表是.asm格式的文件,里面内容如下,根据情况可自行修改

unused.macroid

.globalunused:

id:

unused:

id:

bunused:

id:

;nestedbranchestoblockinterrupts

nop4

bunused:

id:

nop

nop

nop

nop

nop

.endm

.sect".vectors"

.align32*8*4;mustbealignedon256wordboundary

RESET:

unused0;resetvector

unused1

unused2

unused3

unused4

unused5

unused6

unused7

unused8

unused9

unused10

unused11

unused12

;unused13

.ref_xint

mvkl_xint,b0;loaddestinationfunctionaddresstob0

mvkh_xint,b0

bb0

nop

nop

nop

nop

nop

unused14

unused15

而对中断寄存器的操作如下所示:

cregisterunsignedintISTP,CSR,IER;

voidinitIntc(void)

{

CSR&=~1;//GIE=0,globaldisableinterrupt

ISTP=0x10000000;//interruptvectorbaseaddress=0x10000000ifyouchangeitmustchangexint.cmd.vectorssections

IER=0x2002;//interruptenableINT13andNMI

CSR|=1;//GIE=1,globalenableinterrupt

}

这里的cregister在TI的技术文档中有这样的描述:

ThecompilerextendstheC/C++languagebyaddingthecregisterkeywordtoallowhighlevellanguageaccesstocontrolregisters.Whenyouusethecregisterkeywordonanobject,thecompilercomparesthenameoftheobjecttoalistofstandardcontrolregistersfortheC28x(seeTable6-2).Ifthenamematches,thecompilergeneratesthecodetoreferencethecontrolregister.Ifthenamedoesnotmatch,thecompilerissuesanerror.

Table6-2.ValidControlRegisters

------------------------------------

RegisterDescription

------------------------------------------

IERInterruptenableregister

IFRInterruptflagregister

TousethecontrolregistersinTable6-2,youmustdeclareeachregisterasfollows.Thec28x.hincludefiledefinesallthecontrolregistersthroughthissyntax:

externcregistervolatileunsignedintregister;

所以ISTP,CSR,IER这三个寄存器是可以用关键字cregister定义的寄存器,定义之后就可以直接调用了并修改了。

PS:

在DSP62XX系列中有更多这样的寄存器。

六中断服务程序的格式:

如下

voidinterruptxint(void)

{

/*此处加入中断服务程序需要执行的内容*/

}

这里interrupt为关键字,xint与中断向量表中的xint是对应的,不要修改,

所有的这些都弄完了,就可以进行编译、运行了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1