10137|14

180

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

“简简单单DSP”系列学习活动——第四期中断结构学习 [复制链接]

1、外围帧寄存器
2812将外围帧寄存器分为3个空间,分别是:
外围帧0:直接映射到CPU存储器总线
外围帧1:映射到32位外围总线
外围帧2:映射到16位外围总线,只允许16操作
这里所说的外围帧寄存器就是外设寄存器,如ADC寄存器。映射就是分配地址,外围一个地址,CPU一个地址,外围地址映射到CPU地址上。
有的寄存器受保护,对其进行操作的时候好,要屏蔽保护(EALLOW),操作完在开启保护(EDIS).
2、外围中断扩展PIE
外设寄存器中的中断标志位必须由软件清0,才能允许下一次中断进入,而且每次中断后要把PIEACKx0,只有PIEACKx=0,才可以把中断送到CPU
中断分为3级:
a、外设级
bPIE
cCPU
下面分别介绍这个不同的中断级以及这3级的联系
a、外设级
一旦外设产生了中断,对应的外设中断标志寄存器中的中断标志位IF就会置位,如果此时对应的中断使能位设为1,那么外设中断信号 可以送到PIE控制器,如果外设的中断被禁止输入进来,那么外设中断标志位保持为1,直到软件清0
外设级 PIE级的联系就在外设中断使能位那了,实际外设的中断使能位使能的就是允许外设中断进入PIE级,相当于PIE级的中断源,就像外设的中断源一样,有了中断事件,外设中断标志位就会置位,这里也是外设级 就是PIE级得中断事件,有了外设级的中断标志位置位,中断使能位使能,那么PIE级的中断标志位才会置1.
注意的是外设中断标志寄存器中的中断标志位必须由软件清0,才能允许下一次中断进入。
bPIE
PIE级有两中寄存器,一种是中断标志寄存器PIEIFRx,上面已经说过他跟外设级的联系,另一个是中断使能寄存器PIEIERx,这个跟外设级的中断使能寄存器功能差不多,实现的是和CPU级的联系.PIE级还有两个寄存器,一个是控制寄存器PIECTRL,这个是控制整个PIE级的,还有一个应答寄存器PIEACK,PIEIFRx置位,PIEIERx使能还要PIEACKx0才能把中断送到CPU级。
这里注意的是PIEIFRx由硬件清0,但是PIEACKx要由软件清0.
cCPU
CPU级是最终控制中断响应的,也是有两种寄存器,一个是中断标志寄存器IFR,另一个是中断使能寄存器IERIFR是这三级中断的最终的中断标志位,IER是这三级中断的最终中断使能位,只有这三级中断标志位同时置位,三级中断同时使能,这里还有一个CPU级的中断屏蔽位INTM,在以上条件满足的前提下,中断屏蔽位INTM=0CPU才能响应中断,找到中断向量,跳转到中断函数,执行中断操作,CPU级的中断标志位由硬件清0,在中断函数中不用管。
这就是它的中断过程。
396个中断介绍
2812分为12组中断,每组中断有8个中断源,以INTx.y表示,其中x是组(x=1~12),yy=1~8)是组中的位.
在配置中断的时候,
外设级 的中断使能位要使能;
PIECTRL寄存器使能PIE
要知道INTx.y中的xy是多少,找到PIEIERxx=1~12)的x是多少,使能PIEIERx
PIEACKxx=1~12)的x是多少给其清0
IERxx=1~12)的x是多少,使能IERx
中断屏蔽位INTM=0
中断函数中要处理的:
外设中断标志位软件清0
PIEACKxx=1~12)软件清0
4C代码分析
以定时器0C代码分析
timer0的中断向量INT1.7x=1y=7),用到的PIE级的中断使能寄存器是PIEIER1CPU级的IER1.
2812的库函数中有一个定义中断入口地址的函数,用户的中断函数内容可以在这里面写,就不容另外赋中断地址了。中断函数入口地址interrupt void
TINT0_ISR(void)

DSP复位后,进入中函数前,看门狗开着的,所以在进入中函数后第一件事情是关看门狗,在这个函数里面InitSysCtrl();中断是开着的需要关闭(DINT;),PIE寄存器( InitPieCtrl();//初始化pie寄存器)( IER = 0x0000;//禁止所有的中断 IFR = 0x0000;)、中断向量表是没有初始化的,所以要初始化( InitPieVectTable();//初始化pie中断向量表)。

InitSysCtrl();//初始化cpu


DINT;//
关中断


InitPieCtrl();//
初始化pie寄存器
   


IER = 0x0000;//
禁止所有的中断

IFR = 0x0000;




InitPieVectTable();//
初始化pie中断向量表


EALLOW;
// This is needed to write to EALLOW protected registers


PieVectTable.TINT0 = &cpu_timer0_isr;//
指定中断服务子程序,这个地方要是用到了DSP的库函数DSP281X_DefaultIsr()函数就不需要了。

EDIS;

InitCpuTimers();//初始化定时器0

ConfigCpuTimer(&CpuTimer0,150,9.75);//
配置你要定时的时间

StartCpuTimer0();//
定时器开始计数

PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//
使能PIE级中断PIEIERx中的x=1,即使能的12组中的第1组第七个

IER |= M_INT1
//使能CPU级的中断第1

EINT;
//
使能INTM

ERTM;
//
使能仿真时 DBGM
5、在中断函数中要做的
interrupt void
TINT0_ISR(void)
// CPU-Timer 0

{

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //PIEACK
0

CpuTimer0Regs.TCR.bit.TIF = 1;//
外设中断标志位清0

CpuTimer0Regs.TCR.bit.TRB = 1;//
重新装载

}

最新回复

  详情 回复 发表于 2012-5-24 11:51
 
点赞 关注

回复
举报

2498

帖子

0

TA的资源

至上芯片

沙发
 

回复 楼主 superwangyang 的帖子

不错。看得懂哦。。。。。。。O(∩_∩)O哈哈~O(∩_∩)O哈哈~
 
个人签名我的邮箱gaoxiaoan123@163.com!回帖是一种美德!互相帮助,共同进步!
口头禅:生活在于创造机会,把握机会!
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

教程通俗易懂很好

多谢斑竹,很厉害啊,看后很明白了
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

4
 

关于寄存器的位功能定义

你好,为什么寄存器的位功能描述时,每一位的数据类型都是Uint16的。
比如说:
struct  TCR_BITS {        // bits  description
   Uint16    OUTSTS:1;      // 0     Current state of TOUT
   Uint16    FORCE:1;       // 1     Force TOUT
   Uint16    POL:1;         // 2     Output polarity
   Uint16    TOG:1;         // 3     Output toggle mode
   Uint16    TSS:1;         // 4     Timer Start/Stop
   Uint16    TRB:1;         // 5     Timer reload
   Uint16    FRCEN:1;       // 6     Force enable
   Uint16    PWIDTH:3;      // 9:7   BitTOUT output pulse width
   Uint16    SOFT:1;        // 10    Emulation modes
   Uint16    FREE:1;        // 11
   Uint16    rsvd:2;        // 12:13 reserved
   Uint16    TIE:1;         // 14    Output enable
   Uint16    TIF:1;         // 15    Interrupt flag
}
其中的TIE、TIF等等都是一位,为什么前面数据类型却定义成Uint16?
 
 
 

回复

221

帖子

0

TA的资源

一粒金砂(中级)

5
 
楼主辛苦,容易看明白的。
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主你说的太好了,支持你啊,
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 楼主 superwangyang 的帖子

多谢版主,,写的不错。。我好像也能看懂。。嘿嘿!!!
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

8
 
顶的人这么少?
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

9
 
新手请问:文章中C代码分析部分其中:PieVectTable.TINT0 = &cpu_timer0_isr;
是什么意思?
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

10
 
"要知道INTx.y中的xy是多少,找到PIEIERx(x=1~12)的x是多少,使能PIEIERx;
PIEACKx(x=1~12)的x是多少给其清0;
IERx(x=1~12)的x是多少,使能IERx;
中断屏蔽位INTM=0;
中断函数中要处理的:
外设中断标志位软件清0
PIEACKx(x=1~12)软件清0;"
不明白是什么意思?  要知道INTx.y 中的xy是多少,找到PIEIERx(x=1~12) 的x 是多少,使能PIEIERx;然后呢,y怎么找? 使用PIEIERx后x 就能知道了吗,麻烦版主描述详细点
 
 
 

回复

32

帖子

0

TA的资源

一粒金砂(初级)

11
 
学习了  

    很好 支持 支持
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
 好  精辟   通俗易懂
 
 
 

回复

2606

帖子

0

TA的资源

五彩晶圆(初级)

13
 

回复 4楼 fangly8848 的帖子

Unit16 TIF 表示 名为TIF的位是一个16位的寄存器中的一位。这种结构可以方便客户对特殊的位进行定义。这种方式叫bit field
Bit Field Definitions:
Bit fields can be used to assign a name and width to each functional field within a register. Registers
defined in terms of bit fields allow the compiler to manipulate single elements within a register. For
example, a flag can be read by referencing the bit field name corresponding to that flag.
 
个人签名工程 = 数学+物理+经济
 
 

回复

133

帖子

0

TA的资源

纯净的硅(初级)

14
 
楼主辛苦了
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

15
 
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表