版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第6章章C语言和汇编语言程序混合编程语言和汇编语言程序混合编程方法及中断处理方法方法及中断处理方法6.1 C语言和汇编语言程序混合编程方法语言和汇编语言程序混合编程方法 数据类型 寄存器变量6.1.1 在在C语言中嵌入汇编语言程序语言中嵌入汇编语言程序在用在用C语言开发语言开发DSP应用程序时,需要对应用程序时,需要对DSP的底层的底层资源进行操作的场合。资源进行操作的场合。 用用C语言编写相应的代码有一定的难度;语言编写相应的代码有一定的难度; 某些操作某些操作C语言根本就无法实现(如对语言根本就无法实现(如对OVM、CNF等位的操作)。等位的操作)。在在C语言中嵌入单条汇编语句语言中嵌入
2、单条汇编语句asm(需要嵌入的汇编语句需要嵌入的汇编语句) / 系统初始化子程序系统初始化子程序 void initial( )asm( setcSXM);/ SXM位置位置1,抑制,抑制符号位扩展符号位扩展 asm( clrcOVM);/ OVM位清位清0,累,累加器中结果正常溢出加器中结果正常溢出 asm( clrcCNF);/ CNF位清位清0,B0被被配置为数据存储空间配置为数据存储空间 2. 访问访问I/O空间空间3. 访问数据空间访问数据空间预先定义如:预先定义如:volatile unsigned int *IMR=(volatile unsigned int *)0X0004;
3、volatile unsigned int *IFR=(volatile unsigned int *)0X0006;实例中:实例中: *IMR=0X0; *IFR=0X0FFFFH;4. 存储器模式存储器模式5. 系统堆栈系统堆栈6. 在在C语言中嵌入语言中嵌入实现某一完整功能的多条汇编语句实现某一完整功能的多条汇编语句把需要嵌入的多条汇编语句编制成一个子程序,并在把需要嵌入的多条汇编语句编制成一个子程序,并在其入口和出口处遵循其入口和出口处遵循C语言的调用规范进行一些必要语言的调用规范进行一些必要的操作,就可以方便地在的操作,就可以方便地在C语言中调用汇编语言程序语言中调用汇编语言程序 。
4、在在C语言中调用汇编语言程序编写的子程序时,应特语言中调用汇编语言程序编写的子程序时,应特别注意使用的堆栈不是别注意使用的堆栈不是DSP的硬件堆栈,而是的硬件堆栈,而是.CMD文件定义的软堆栈。文件定义的软堆栈。 (1)调用函数时堆栈的使用情况调用函数时堆栈的使用情况(2)C语言调用子程序的规范语言调用子程序的规范1)主程序的操作)主程序的操作 主程序把需要向子程序传递的参数按反序压入堆主程序把需要向子程序传递的参数按反序压入堆栈(最右边的参数最先被压入堆栈,最左边的参数栈(最右边的参数最先被压入堆栈,最左边的参数最后被压入堆栈);最后被压入堆栈); 主程序调用子程序;主程序调用子程序; 在子
5、程序返回前,在子程序返回前,ARP已设置为已设置为AR1; 当子程序调用完毕后,主程序要弹出先前压入堆当子程序调用完毕后,主程序要弹出先前压入堆栈的传递参数。栈的传递参数。操作语句:操作语句:SBRK n(n是主程序向子程序传递的参数的个数)是主程序向子程序传递的参数的个数)注意:注意:ARP已经由编译器自动设置为已经由编译器自动设置为AR1。 子程序的操作子程序的操作在子程序的入口处,假设在子程序的入口处,假设ARP已经被设置为已经被设置为AR1(由(由C编译器自动完成的)。编译器自动完成的)。 从硬件堆栈中弹出返回地址,再把它压入软件堆栈;从硬件堆栈中弹出返回地址,再把它压入软件堆栈; 将
6、主程序的数据结构指针将主程序的数据结构指针FP压入堆栈;压入堆栈; 若在子程序中要改变若在子程序中要改变AR6或者或者AR7,需要把它们压入,需要把它们压入堆栈;堆栈; 分配局部数据结构;分配局部数据结构; 执行子程序的实际任务代码;执行子程序的实际任务代码; 如果子程序有返回值,则把此返回值放入累加器中;如果子程序有返回值,则把此返回值放入累加器中; 设置设置ARP为为AR1; 解除分配的局部数据结构;解除分配的局部数据结构; 如果保存了如果保存了AR6和和AR7,则从软件堆栈恢复它们,则从软件堆栈恢复它们的值;的值; 从软件堆栈恢复从软件堆栈恢复FP; 把软件堆栈中存储的返回地址压入硬件堆
7、栈;把软件堆栈中存储的返回地址压入硬件堆栈; 返回。返回。说明说明如果是如果是C语言主程序调用语言主程序调用C语言子程序,则上面所述语言子程序,则上面所述的调用规范是的调用规范是C编译器在生成汇编语言程序代码时自编译器在生成汇编语言程序代码时自动完成的;动完成的;如果是如果是C语言主程序调用汇编语言程序编写的子程序,语言主程序调用汇编语言程序编写的子程序,则子程序的编写必须遵循前述则子程序的编写必须遵循前述“子程序需要进行的操子程序需要进行的操作作”规范,而规范,而“主函数需要进行的操作主函数需要进行的操作”则由则由C编译编译器自动完成。器自动完成。6.1.2 分开编写分开编写C语言和汇编语言
8、程序语言和汇编语言程序1分离的分离的C语言程序和汇编语言程序接口语言程序和汇编语言程序接口在编写汇编语言程序时应注意:在编写汇编语言程序时应注意: 必须遵守有关的调用规则和寄存器规则,这样必须遵守有关的调用规则和寄存器规则,这样不会影响不会影响C语言程序的运行环境。语言程序的运行环境。C语言程序既可以调用汇编语言程序,也可以访语言程序既可以调用汇编语言程序,也可以访问汇编语言程序中定义的变量。问汇编语言程序中定义的变量。I. 汇编语言程序也可以调用汇编语言程序也可以调用C语言函数或访问语言函数或访问C语语言程序中定义的变量。言程序中定义的变量。 2在在C语言程序中访问汇编语言程序的变量语言程序
9、中访问汇编语言程序的变量根据变量或常数定义的方式,可用以下根据变量或常数定义的方式,可用以下3种方法来实种方法来实现这种操作。现这种操作。(1)汇编变量在)汇编变量在.bss段中定义。段中定义。访问在访问在.bss中定义的变量按以下步骤可进行正常访问:中定义的变量按以下步骤可进行正常访问: 采用采用.bss命令定义变量;命令定义变量; 采用采用.global命令定义变量;命令定义变量; 在变量名前加一下划线在变量名前加一下划线“_”; 在在C语言程序中将变量说明为外部变量。语言程序中将变量说明为外部变量。 (2)变量不在)变量不在.bss段中定义。段中定义。访问不在访问不在.bss中定义的变量
10、按以下步骤可进行正常访中定义的变量按以下步骤可进行正常访问:问:(3)用)用.set和和.global命令定义全局常数。命令定义全局常数。从从C语言程序中访问在汇编语言程序中用语言程序中访问在汇编语言程序中用.set和和.global命令定义的常数,按以下步骤可进行正常访问:命令定义的常数,按以下步骤可进行正常访问: 在汇编语言程序中将常数(符号)定义为全局常数;在汇编语言程序中将常数(符号)定义为全局常数;C语言程序中访问汇编语言程序中的常数时,应在语言程序中访问汇编语言程序中的常数时,应在常数名之前加一个地址操作符常数名之前加一个地址操作符“&”。3在汇编语言程序中访问在汇编语言程
11、序中访问C语言程序变量语言程序变量从汇编语言程序中访问从汇编语言程序中访问C语言程序变量按以下步语言程序变量按以下步骤可进行正常访问:骤可进行正常访问: 在在C语言程序中定义变量(如语言程序中定义变量(如 x););在汇编语言程序中使用时前面加下划线在汇编语言程序中使用时前面加下划线“_”。(如(如_x)。)。6.2 用用C语言处理语言处理DSP中断中断F240X内核提供了一个不可屏蔽的中断内核提供了一个不可屏蔽的中断NMI和和6个按个按优先级获得服务的可屏蔽中断优先级获得服务的可屏蔽中断INT1INT6。F240X系列系列DSP通过中断系统中的一个两级中断来扩通过中断系统中的一个两级中断来扩
12、展系统可响应的中断个数。展系统可响应的中断个数。DSP的中断请求的中断请求/应答硬件逻辑和中断服务程序软件应答硬件逻辑和中断服务程序软件是一个两级的层次结构。是一个两级的层次结构。如果一个引起中断的外设事件发生且相应的中断使能如果一个引起中断的外设事件发生且相应的中断使能位被置位被置1,则会产生一个从外设到中断控制器的中断,则会产生一个从外设到中断控制器的中断请求。请求。从几个外设来的外设中断请求(从几个外设来的外设中断请求(PIRQ)在中断控制)在中断控制器处器处“或或”产生一个到产生一个到CPU的中断请求(的中断请求(INTn)。)。如果一个外设中断请求如果一个外设中断请求PIRQ在在CP
13、U对对INTn应答后的应答后的一个周期内仍然有效时,则另一个中断请求脉冲一个周期内仍然有效时,则另一个中断请求脉冲INTn也会产生。也会产生。而而CPU总是响应优先级高的外设中断请求。总是响应优先级高的外设中断请求。 CPU应答外设中断时,从应答外设中断时,从PIVR寄存器中读取相应中寄存器中读取相应中断的向量,并产生一个转到该中断服务子程序入口的断的向量,并产生一个转到该中断服务子程序入口的向量。向量。 用用C语言实现可屏蔽中断程序的两种方法语言实现可屏蔽中断程序的两种方法 : 通过软件识别中断标志的方法。通过软件识别中断标志的方法。优点:实现中断程序代码少、易于理解。优点:实现中断程序代码
14、少、易于理解。 2. 通过外围中断向量寄存器通过外围中断向量寄存器PIVR的值识别中断。的值识别中断。实现:用实现:用C语言中的语言中的SWITCH在中断服务程序,在中在中断服务程序,在中断程序入口处,根据断程序入口处,根据PIVR的值来判断发生的中断是的值来判断发生的中断是否为需要的中断。否为需要的中断。 例例1:用软件识别中断标志的方法实现捕捉单元:用软件识别中断标志的方法实现捕捉单元4的中的中断(断(CAP4INT)。)。1. 建立一个复位和中断向量文件建立一个复位和中断向量文件vectors.asm:.titlevectors.asm.ref_c_int0,_nothing,_capi
15、nt ;定义符号;定义符号.sect.vectorsreset:b _c_int0 ;复位向量;复位向量 INT1:b _nothingINT2: b _nothingINT3:b _nothingINT4:b _capint;当发生;当发生int4中断时,中断时,程序跳转至程序跳转至“capint”所标志的中断服务程序。所标志的中断服务程序。INT5:b _nothingINT6:b _nothing ;当发生其它级别的;当发生其它级别的中断时,直接跳转至中断时,直接跳转至nothing所标志的中断服务程序所标志的中断服务程序 2. 中断源辨别中断源辨别 当 发 生当 发 生 C A P 4
16、 I N T 时 , 其 相 应 的 中 断 标 志 位时 , 其 相 应 的 中 断 标 志 位(EVBIFRC最低位)置最低位)置1。在在capint标号的中断服务程序对中断源判断:标号的中断服务程序对中断源判断:若若EVBIFRC的最低位为的最低位为1,则执行后面的中断服务程,则执行后面的中断服务程序;序;若若EVBIFRC的最低位为的最低位为0,表明没有发生,表明没有发生CAP4INT中中断,则中断直接返回(或跳到与该中断标志相对应的断,则中断直接返回(或跳到与该中断标志相对应的中断服务程序)。中断服务程序)。/ CAPINT4中断服务程序中断服务程序 void interrupt c
17、apint() int flag; flag=EVBIFRC&0X01; / 判断是否是判断是否是CAP4中断中断 if(flag!=0 x01) asm( clrc INTM); / 返回前开中断返回前开中断 return;/ 如果不是如果不是CAP4中断,则直接返中断,则直接返回回 ;/ 如果是如果是CAP4中断,则执行响应中断,则执行响应的中断操作的中断操作 EVBIFRC=EVBIFRC|0 x01;/ 写写1清除清除CAP4中断标志中断标志 asm( clrc INTM);/ 返回前开中断返回前开中断 return;/ 中断返回中断返回 例例2:用外设中断向量寄存器:用外设中
18、断向量寄存器PIVR的值识别中断的方的值识别中断的方法,来实现法,来实现CAP4INT 。当某一个外设中断发生时,当某一个外设中断发生时,CPU就会把相应的中断就会把相应的中断向量装载到外设中断向量寄存器向量装载到外设中断向量寄存器PIVR中,并且每一中,并且每一个中断向量和各个外设中断一一对应。个中断向量和各个外设中断一一对应。 CAP4INT:PIVR=0X0036/ 中断服务子程序中断服务子程序 void interrupt capint() switch(*PIVR) case 0 x0036: 。 /用户程序用户程序 EVBIFRC=EVBIFRC|0 x01;/ 写写1清除清除CAP4中断标志中断标志 break;/ 如果是如果是CAP4中断,则执行响应的中断服务程序代码中断,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拆迁与土地出让管理制度
- 幼儿园大班2和3的组成
- 第1课《白鹭》(第二课时)(分层作业)-【上好课】 五年级语文上册同步高效课堂系列(统编版)
- 2024年松原c1客运资格证考试
- 算法设计与分析 课件 5.10-动态规划总结
- 算法设计与分析 课件 1.2.0-算法分析准则
- 2024年石家庄2024年客运从业资格证
- 2024年资阳客运从业资格证培训考试资料
- 吉首大学《近代工程材料导论》2021-2022学年第一学期期末试卷
- 吉首大学《导演基础》2021-2022学年第一学期期末试卷
- 三年级数学(上)计算题专项练习附答案集锦
- 历史期中复习课件七年级上册复习课件(部编版2024)
- 公务员2021年国考《申论》真题(地市级)及参考答案
- 新教科版小学1-6年级科学需做实验目录
- 2024秋期国家开放大学专科《高等数学基础》一平台在线形考(形考任务一至四)试题及答案
- DPtech-FW1000系列防火墙系统操作手册
- 五年级上册小学高年级学生读本第1讲《伟大事业始于梦想》说课稿
- 图像学完整分
- 印刷服务投标方案(技术方案)
- 思想道德与法治课件:第五章 第二节 吸收借鉴优秀道德成果
- 物理化学-傅献彩-第八章-电解质溶液ppt课件
评论
0/150
提交评论