c6000 中断小结

c6000 中断小结1. 中断相关概念中断过程———————————–你在下象棋,突然电话响了,你回屋接电话,然后回来继续下象棋,这个过程就叫做中断响应过程。CPU执行正常任务———————下象棋保护现场———————————-你已经想好要“将军”,先在脑海中记下来。中断

大家好,又见面了,我是你们的朋友全栈君。

1.  中断相关概念
中断过程———————————–你在下象棋,突然电话响了,你回屋接电话,然
后回来继续下象棋,这个过程就叫做中断响应过程。
CPU执行正常任务———————下象棋
保护现场———————————-你已经想好要“将军”,先在脑海中记下来。
中断发生———————————-电话响-
中断服务程序—————————-接电话
恢复现场———————————-回来后恢复刚才想法
中断返回———————————-你回来继续下象棋
中断屏蔽———————————-Boss 正在训话,要求所有电话关机,你不能接电话
了。
不可屏蔽中断——————————-你内急,即使是 Boss 在训话,你还是得到外面去
嘘嘘。

可屏蔽中断——————————-你在“闭关修炼”,可以不受外界干扰。
 
2.  中断源
C6000 支持软件中断和硬件中断。软件中断由指令产生中断请求,硬件中断可以来自
外设的一个请求信号,如外部中断。C620x/C670x 中断向量表

 

中断号   中断名称     中断功能

00000b    DSPINT      Host port host to DSP interrupt

00001b    TINT0        Timer 0 interrupt

00010b    TINT1        Timer 1 interrupt

00011b    SD_INT      EMIF SDRAM timer interrupt

00100b    EXT_INT4     External interrupt 4

00101b    EXT_INT5     External interrupt 5

00110b    EXT_INT6     External interrupt 6

00111b    EXT_INT7     External interrupt 7

01000b    EDMA_INT    EDMA channel (0 through 15) interrupt

01001b    Reserved Not used

01010b    Reserved Not used

01011b    Reserved Not used

01100b    XINT0        McBSP 0 transmit interrupt

01101b    RINT0        McBSP 0 receive interrupt

01110b    XINT1        McBSP 1 transmit interrupt

01111b    RINT1        McBSP 1 receive interrupt

Other   Reserved

不同型号的 DSP 定义中断号所对应的中断功能不同,为了达到统一使用中断号功能,
DSP 可以使用中断复用寄存器进行重新映射。通过中断复用寄存器映射可以把中断源映射
到任何 CPU中断。
 
中断复用寄存器默认中断号映射表

CPU

Related

INTSEL

Interrupt

 

Interrupt

INTSEL field

Reset V alue

Acronym

Interrupt Deion

INT4

INTSEL4

00100b

EXT_INT4

External interrupt pin 4

INT5

INTSEL5

00101b

EXT_INT5

External interrupt pin 5

INT6

INTSEL6

001 10b

EXT_INT6

External interrupt pin 6

INT7

INTSEL7

001 1 1b

EXT_INT7

External interrupt pin 7

INT8

INTSEL8

01000b

DMA_INT0/

DMA Channel 0 Interrupt/

 

 

 

EDMA_INT

EDMA interrupt

INT9

INTSEL9

01001b

DMA_INT1

DMA Channel 1 interrupt ??

INT10

INTSEL10

0001 1b

SD_INT

EMIF SDRAM timer interrupt

 

 

 

 

(C62x/C67x)

 

 

 

SD_INT A

EMIF A SDRAM timer interrupt

 

 

 

 

(C64x)

INT1 1

INTSEL1 1

01010b

DMA_INT2

DMA Channel 2 interrupt ??

INT12

INTSEL12

0101 1b

DMA_INT3

DMA Channel 3 interrupt ??

INT13

INTSEL13

00000b

DSPINT

Host port to DSP interrupt

INT14

INTSEL14

00001b

TINT0

T imer 0 interrupt

INT15

INTSEL15

00010b

TINT1

T imer 1 interrupt

3.  常用中断寄存器
通过对中断寄存器进行配置,可以实现各种中断功能。
IER(中断使能寄存器)
IFR(中断标志寄存器)
ISR(中断设置寄存器)
ICR(中断清除寄存器)
ISTP(中断向量表起始地址寄存器)中断向量程序的地址可以通过 ISTP寄存器进行重新映

MUXH(中断复用寄存器)
MUXL(中断复用寄存器)
通过 DSP data sheet 可以很容易找到寄存器的绝对地址,但为了减少配置错误和方便移
植,在编程时一般采用 CSL 函数对中断寄存进行配置。

4.  CSL(DSP API 函数)函数使用说明
在开发 DSP 的过程中一定要用好 CSL 函数,它给 DSP 的编程带来很多方便。使用 CSL
函数可以使程序更容易理解和维护,同时可以有效避免在编程中的笔误。
 
IRQ_clear(IRQ_EVT_TINT0);//对 IFR寄存器进行操作,定时中断标志位清零
IRQ_enable(IRQ_EVT_TINT0;//对 IER寄存器进行操作,使能定时中断
IRQ_map(IRQ_EVT_TINT0,12);//对 MUX 寄存器进行配置,根据需要把中断号进行重新映
射。
IRQ_globalEnable();//对CSR 中 GIE 标志位进行配置,标志位置 1;
。。。。。。。。。。。。。
 
相应的 CSL函数可以在 CCS自带的PDF 文档《TMS320C6000Chip Support Library API
Reference Guide》中进行查找
 
5.  中断响应流程图 
 中断流程图
  

6.  中断过程描述
 
1.  上电复位,产生复位中断请求,上电中断无需确认,直接执行。
2.  STW    B0,*–B15;  进行现场保护
3.  MVKL  addr,B0;
MVKH  addr,B0;载入中断向量表,将中断向量表送入程序指针。
4.  B      B0;跳转至 B0 中存储的地址,执行中断向量表。
5.  执行_c_int00 进行初始化
6.  跳转至 main()执行 csl 函数,IO口,定时器等初始化。
7.  执行 while 循环。
8.  定时时间到,产生定时中断。
9.  重复执行 2-4步骤
10.  执行中断服务程序 c_int14。
11.  中断返回
12.  LDW    *B15++,B0  恢复现场。
13.  继续执行 while 循环。
 
7.  中断程序解析
void main()
{
           
           CSL_init();//CSL函数初始化
 
           Htimer = TIMER_open(TIMER_DEV0,TIMER_OPEN_RESET);//打开定时器 0,返回定
时器句柄
           TimerEventId = TIMER_getEventId(Htimer);//取得定时事件 ID
           TIMER_config(Htimer,&Mtimer_configA);//配置定时器
 
           Hgpio  = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET);//打开 IO
           GPIO_config(Hgpio,&Mgpio_config);//配置 IO
 
           IRQ_setVecs(vectors);//重新设置中断向量,
           IRQ_globalEnable();//全局中断使能
           IRQ_nmiEnable(); 
           IRQ_map(TimerEventId,14);//把定时中断重新映射到 14
           IRQ_reset(TimerEventId);
           IRQ_enable(TimerEventId);//
 
           TIMER_start(Htimer);//定时开始
 
    while(1);//死循环
 
           TIMER_close(Htimer);
           GPIO_close(Hgpio);

}
/**********************************************************************
*  中断服务程序
**********************************************************************/
interrupt void c_int14(void)//中断服务程序
{
    if(flag==0)
    {
                GPIO_pinWrite(Hgpio,GPIO_PIN3,flag); 
                flag=1;
           }
           else
           {
                GPIO_pinWrite(Hgpio,GPIO_PIN3,1); //点灯
                flag=0;
           }
}
 
*——————————————————————————
* Global symbols defined here and exported out of this file
*——————————————————————————
    .global _vectors//全局标号,可以在别处使用.
    .global _c_int00
    .global _vector1
    .global _vector2
    .global _vector3
    .global _vector4
    .global _vector5
    .global _vector6
    .global _vector7
    .global _vector8
   .global _vector9          
    .global _vector10  
    .global _vector11    
    .global _vector12  
    .global _vector13    
    .global _c_int14  ; Hookup the c_int14 ISR in main()
    .global _vector15
 
*——————————————————————————
* Global symbols referenced in this file but defined somewhere else.  
* Remember that your interrupt service routines need to be referenced here.
*——————————————————————————
    .ref _c_int00//相当于 extern,在这里引用,在别处定义

*——————————————————————————
* This is a macro that instantiates one entry in the interrupt service table.
*——————————————————————————
VEC_ENTRY .macro addr//定义中断向量入口地址
 
    STW   B0,*–B15;保存B0 内容,中断产生后执行的第一条指令
    MVKL  addr,B0;
      MVKH  addr,B0;//把地址装入 B0
    B     B0;跳转至 B0 中存储的地址
    LDW   *B15++,B0;恢复B0内容; 由于C6000流水线的原因,跳转后仍然可以执行多条指                 

    NOP   2
    NOP   
    NOP   
    .endm
 
 
*——————————————————————————
* This is a dummy interrupt service routine used to initialize the IST.
*——————————————————————————
_vec_dummy:未定义中断服务程序
  B     B3;其他没有定义的中断跳转至 B3 存储的地址
  NOP  5
 
*——————————————————————————
* This is the actual interrupt service table (IST). It is properly aligned and
* is located in the subsection .text:vecs. This means if you don’t explicitly
* specify this section in your linker command file, it will default and link
* into the .text section. Remember to set the ISTP register to point to this
* table.
*——————————————————————————
.sect “.text:vecs”;定义段
.align 1024;1024 字节对边界对齐
 
_vectors:
_vector0:    VEC_ENTRY _c_int00      ;RESET  跳转到_c_int00 ,_c_int00是 c语言程序的入口
_vector1:    VEC_ENTRY _vec_dummy  ;NMI
_vector2:    VEC_ENTRY _vec_dummy  ;RSVD
_vector3:    VEC_ENTRY _vec_dummy ;  所有未定义中断均跳转到同一地址
_vector4:    VEC_ENTRY _vec_dummy
_vector5:    VEC_ENTRY _vec_dummy
_vector6:    VEC_ENTRY _vec_dummy
_vector7:    VEC_ENTRY _vec_dummy

_vector8:    VEC_ENTRY _vec_dummy
_vector9:    VEC_ENTRY _vec_dummy
_vector10:  VEC_ENTRY _vec_dummy
_vector11:  VEC_ENTRY _vec_dummy
_vector12:  VEC_ENTRY _vec_dummy
_vector13:  VEC_ENTRY _vec_dummy
_vector14:  VEC_ENTRY _c_int14  ; Hookup the c_int14 ISR in main()  定时中断中断向量
_vector15:  VEC_ENTRY _vec_dummy
 
*——————————————————————————————————

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149065.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?[通俗易懂]

    消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?

    2022年2月12日
    46
  • PDB文件说明

    PDB文件说明蛋白质数据库ProteinDataBank(PDB)是一个包含蛋白质、核酸等生物大分子的结构数据的数据库,网址是http://www.rcsb.org。PDB可以经由网络免费访问,是结构生物学研究中的重要资源。为了确保PDB资料的完备与权威,各个主要的科学杂志、基金组织会要求科学家将自己的研究成果提交给PDB。PDB数据库存储结构数据的文件是PDB文件,每一个蛋白质或核酸都对应着一个编号,即P…

    2022年6月2日
    126
  • 因子分析、主成分分析(PCA)、独立成分分析(ICA)——斯坦福CS229机器学习个人总结(六)[通俗易懂]

    因子分析、主成分分析(PCA)、独立成分分析(ICA)——斯坦福CS229机器学习个人总结(六)[通俗易懂]因子分析是一种数据简化技术,是一种数据的降维方法。因子分子可以从原始高维数据中,挖掘出仍然能表现众多原始变量主要信息的低维数据。此低维数据可以通过高斯分布、线性变换、误差扰动生成原始数据。因子分析基于一种概率模型,使用EM算法来估计参数。主成分分析(PCA)也是一种特征降维的方法。学习理论中,特征选择是要剔除与标签无关的特征,比如“汽车的颜色”与“汽车的速度”无关;PCA中要处理与标

    2022年5月17日
    40
  • ios激活成功教程软件_qt.qpa.plugin:Could not

    ios激活成功教程软件_qt.qpa.plugin:Could not注意:一定要手动创建文件夹,在相应文件夹下进行操作,否则无法成功生成注册码激活成功教程步骤:1.安装qtp,一路默认下来,到要求输入License的界面2.拷贝mgn-mqt82.exe(下载)到C:\ProgramFiles\MercuryInteractive(自己手动创建)文件夹下3.自己手动创建C:\ProgramFiles\CommonFiles\Mercury

    2022年10月1日
    1
  • dos攻击防范 php,DOS攻击和DDOS攻击的区别「建议收藏」

    dos攻击防范 php,DOS攻击和DDOS攻击的区别「建议收藏」DOS攻击和DDOS攻击的区别DDOS和DOS攻击都会使计算机或网络无法提供正常的服务;而DDOS和DOS的区别在于,DDOS是一种分布式拒绝服务,会将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。如何防DOS攻击和DDOS攻击1、带宽资源要充足带宽直接决定了抗DDOS攻击的能力,至少要选择100M带宽的,越多越好。2、服务器的硬件配置在带宽以…

    2022年9月30日
    1
  • matlab 画折线图并美化

    matlab 画折线图并美化使用函数:plot(绘图);set(设置坐标属性);print(输出图片)代码如下:X=1:9;Y=10:10:90;f2=figure(2);set(gcf,’unit’,’centimeters’,’position’,[0,0,8,6])plot(X,Y,’-ok’,’LineWidth’,1,’MarkerSize’,5,’MarkerFaceColor’,’k’)set(gca,’FontName’,’TimesNewRoman’,’FontSize’

    2022年6月7日
    207

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号