网站大量收购独家精品文档,联系QQ:2885784924

第6章C语言和编语言程序混合编程方法及中断处理方法.ppt

第6章C语言和编语言程序混合编程方法及中断处理方法.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章C语言和编语言程序混合编程方法及中断处理方法

第6章 C语言和汇编语言程序混合编程方法及中断处理方法 6.1 C语言和汇编语言程序混合编程方法 数据类型 寄存器变量 6.1.1 在C语言中嵌入汇编语言程序 在C语言中嵌入单条汇编语句 6.1.2 分开编写C语言和汇编语言程序 2.在C语言程序中访问汇编语言程序的变量 3.在汇编语言程序中访问C语言程序变量 4. 在C语言中嵌入 实现某一完整功能的多条汇编语句 (1)调用函数时堆栈的使用情况 (2)C语言调用子程序的规范 子程序的操作 说明 6.2 用C语言处理DSP中断 如果一个引起中断的外设事件发生且相应的中断使能位被置1,则会产生一个从外设到中断控制器的中断请求。 从几个外设来的外设中断请求(PIRQ)在中断控制器处“或”产生一个到CPU的中断请求(INTn)。 如果一个外设中断请求PIRQ在CPU对INTn应答后的一个周期内仍然有效时,则另一个中断请求脉冲INTn也会产生。 而CPU总是响应优先级高的外设中断请求。 CPU应答外设中断时,从PIVR寄存器中读取相应中断的向量,并产生一个转到该中断服务子程序入口的向量。 用C语言实现可屏蔽中断程序的两种方法 : 通过软件识别中断标志的方法。 优点:实现中断程序代码少、易于理解。 2. 通过外围中断向量寄存器PIVR的值识别中断。 实现:用C语言中的SWITCH在中断服务程序,在中断程序入口处,根据PIVR的值来判断发生的中断是否为需要的中断。 例1:用软件识别中断标志的方法实现捕捉单元4的中断(CAP4INT)。 1. 建立一个复位和中断向量文件vectors.asm: .title vectors.asm .ref _c_int0,_nothing,_capint ;定义符号 .sect .vectors reset: b _c_int0 ;复位向量 INT1: b _nothing INT2: b _nothing INT3: b _nothing INT4: b _capint ;当发生int4中断时,程序跳转至“capint”所标志的中断服务程序。 INT5: b _nothing INT6: b _nothing ;当发生其它级别的中断时,直接跳转至nothing所标志的中断服务程序 * 在用C语言开发DSP应用程序时,需要对DSP的底层资源进行操作的场合。 用C语言编写相应的代码有一定的难度; 某些操作C语言根本就无法实现(如对OVM、CNF等位的操作)。 asm(需要嵌入的汇编语句) // 系统初始化子程序 void initial( ) { asm( setc SXM); // SXM位置1,抑制符号位扩展 asm( clrc OVM); // OVM位清0,累加器中结果正常溢出 asm( clrc CNF); // CNF位清0,B0被配置为数据存储空间 } 2. 访问I/O空间 3. 访问数据空间 预先定义如: volatile unsigned int *IMR=(volatile unsigned int *)0X0004; volatile unsigned int *IFR=(volatile unsigned int *)0X0006; 实例中: { *IMR=0X0; *IFR=0X0FFFFH; … } 4. 存储器模式 5. 系统堆栈 1.分离的C语言程序和汇编语言程序接口 在编写汇编语言程序时应注意: 必须遵守有关的调用规则和寄存器规则,这样不会影响C语言程序的运行环境。 C语言程序既可以调用汇编语言程序,也可以访问汇编语言程序中定义的变量。 汇编语言程序也可以调用C语言函数或访问C语言程序中定义的变量。 根据变量或常数定义的方式,可用以下3种方法来实现这种操作。 (1)汇编变量在.bss段中定义。 访问在.bss中定义的变量按以下步骤可进行正常访问: ① 采用.bss命令定义变量; ② 采用.global命令定义变量; ③ 在变量名前加一下划线“_”; ④ 在C语言程序中将变量说明为外部变量。 (2)变量不在.bss段中定义。 访问不在.bss中定义的变量按以下步骤可进行正常访问: (3)用.set和.global命令定义全局常数。 从C语言程序中访问在汇编语言程序中用.set和.global命令定义的常数,按以下步骤可进行正常访问: 在汇编语言程序中将常数(符号)定义为全局常数; C语言程序中访问汇编语言程序中的常数时,应在常数名之前加一个地址操作符“”。 从汇编语言程序中访问C语言程序变量按以下步骤可进行正常访问: 在C语言程序中定义变量(如 x); 在汇编语

文档评论(0)

5201314118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065201001000004

1亿VIP精品文档

相关文档