54dsp十天速成(编辑修改稿)内容摘要:

NT1: RETE。 Timer1 中断 (默认 )或 DMA1 中断 . NOP NOP NOP INT3: RETE。 外部中断 3 NOP NOP NOP HPINT: RETE。 HPI 中断 NOP NOP NOP BRINT1: RETE。 McBSP 1 接收中断 (默认 )或 DMA2 中断 NOP NOP NOP BXINT1: RETE。 McBSP 1 发送中断 (默认 )或 DMA3 中断 NOP NOP NOP DMAC4: RETE。 DMA4 中断 NOP NOP NOP DMAC5: RETE。 DMA5 中断 .end 在本实验中只要把在开头加上中断子程序标号的引用,并在中断表的TINT 部分换成跳转指令就行了: ******************************************************* * for 方波发生器 ******************************************************* .sect .vectors。 开始命名段 .vecotrs .global CodeStart。 引用程序入口的全局符号定义 .global TINT0_ISR。 引用 Timer0 中断子程序 <节省篇幅,中间省略> TINT: B TINT0_ISR。 Timer0 中断 NOP NOP BRINT0: RETE。 McBSP 0 receive interrupt 节省篇幅,下略 技巧提示:只有第一个中断( Reset 中断)是每个程序都应该有的,在不需要其它中断的情况下,可以只用这一部分,后面可以省略。 如果只需要部分中断也可以按需设置,但必须保证所用中断在中断向量表的位置不变。 不熟悉中断向量表的情况下最好还是用这个完整中断向量表样例。 另外 C5400系列中不同型号 DSP的中断向量数量和在中断向量表中的位置有所不同,程序移植时需要查相应 datasheet 确认。 2.中断向量指针 中断向量表的位置并没有强 制的位置,可以在内部存贮器,也可以在外部存贮器。 但有一个要求:中断量表必须放在 80H 字长存贮块的起始处,即中断向量表的首地址的低 7 位必须全为 0。 DSP 的寄存器 PMST 的高 9 位是中断向量表的指针 IPTR。 其上电时默认是在 FF80H 处,这是为了运行固化在内部 ROM 的上电加载程序 (见实验八的程序加载部分 )。 由于 FF80H 是只读的,加载用户自定义的中断向量表时会报错。 这样需要重新设置 IPTR 的值,本书一般把它重定义到 0080H(也可以用自定义的地址),并在程序开头重新设置一下IPTR 的值:。 改变中断向量表位置 K_IPTR .set 0080h。 指向 0080H,默认是 FF80 LDM PMST,A AND 7FH,A。 保留低 7 位,清掉高位 OR K_IPTR,A。 将新值传到高 9 位 STLM A,PMST。 修改 PMST 寄存器 技巧指示:由于这段代码几乎每个程序都需要,可以单独存成一个文件: ,然后在程序需要的地方用 .copy 或 .include 指令: .copy “ ” 或: .include “ ” 编译时就会自动把这段代码嵌到相 应位置。 稍微要注意的是由于这一小段代码要用到累加器 A,所以最好保证执行这段代码之前不要使用累加器 A。 其它还有一些经常重复的代码,如初始化 SP、 DP、 IPTR 的代码都可以写在一个文件里 include/copy 进来。 注 1: .copy和 .inlucde指令效果是一样的,只是在生成程序列表时, .copy 会把代码复制过来,而 .include 不会。 注 2:文件名可以用路径,如果不用,则编译器会按下面的循序搜索:当前目录、编译选项指定的目录、环境变量指定的目录。 更多参考: 1.关于中断: SPRU131 TMS320C54x DSP Reference Set, Volume 1: CPU and Peripherals, Interrupts 2.关于定时器: SPRU131 TMS320C54x DSP Reference Set, Volume 1: CPU and Peripherals, Timer 实验 外部中断:频率计 DSP 有 4 个外部中断 INT0INT3,下降沿触发,实验箱的频率计使用的是 INT3。 频率计的设计原理是:在设定时间下计外部中断 INT3 的次数,除以定时器的定时周期 (也就是乘以定时器中断的触发频率 ),就得到外部脉冲频率。 实验箱上配有 共 8 档频率源,也可以外接频率源。 用跳线冒选择频率源,并接到 INT3 上。 下面的例程是定时器定时 1s,在 INT3 中断服务子程序中计脉冲个数,到时则关闭中断。 脉冲计数结果显示到数码管上,即为以单位为 Hz 的频率值 ********************************************** *频率计 ********************************************** .mmregs .global CodeStart .global TINT1_ISR .global INT3_ISR .include ../ .data DATA_DP: PulseCounter: .word 0。 脉冲计数器 Display: .word 0FH,0FH,0FH,0FH,0FH,0FH。 存放数据管显示值 ,值 F 在数码管上不显示 DotData: .word 000000B。 数码管的 dot point Number10: .word 10。 十六进制转 BCD 所除的 10 .text CodeStart: .copy ../。 初始化 SP、 DP 和 IPTR的代码段 STM 99,AR1。 10ms 计数后再 100 分频 STM Display,AR3。 定义数据管显示存贮区指针 LD 0,A。 A 用来计脉冲数 SSBX INTM。 关中断 CALL Timer1Init。 初始化 Timer1 STM 110000000B,IMR。 允许 Timer1 和 INT3中断 STM 0FFH,IFR。 清除挂起的中断 RSBX INTM。 开中断 wait: B wait。 *************************************** *外部中断子程序 *************************************** INT3_ISR: ADD 1,A。 计中断次数 RETE *************************************** *定时器中断子程序 *************************************** TINT1_ISR: BANZ GoOnCount,*AR1。 测量次数计数器减 1,次数为 0 就中止计数数,。 结束计数 STM 0,IMR。 取消所有中断 HEX2BCD:。 把计数结果转成 BCD 码 RPT 15 SUBC Number10,A STH A,*AR3+ AND 0FFFFH,A BC HEX2BCD,ANEQ。 在数码管上显示结果 STM Display,AR3 PORTW *AR3+,Digital0 PORTW *AR3+,Digital1 PORTW *AR3+,Digital2 PORTW *AR3+,Digital3 PORTW *AR3+,Digital4 PORTW *AR3+,Digital5 PORTW DotData,DotPoint RETE GoOnCount:。 继续计数 STM 1100001B,IFR。 清除挂起的中断 RETE *************************************** *定时器初始化 *************************************** Timer1Init:。 定时器 1 的寄存器地址 TIM1 .set 0030h。 减1计数器 PRD1 .set 0031h。 存放定时时间常数 TCR1 .set 0032h。 定时器状态及控制寄存器。 F=50MHz, T=20ns*(1+15)*(1+3124)=20ns*16*31250=10ms STM 010,TCR1。 TSS 置位停止 Timer STM 31249,PRD1 STM 2FH,TCR1 RET .end 简单起见本例只能测一次,可以做一些改进,比如每隔 12S 自动重新测量,或者用按键来触发测量。 实验 数码管及 LED 显示接口实验 实验箱说明部分已经介绍了数码管的控制原 理,下面的程序 Digital 简单的演示了对数码管和 LED 控制的指令,可以在显示预设的数字和 LED 状态。 复杂的程序可以见附盘的流水灯程序, Digital。 =========================================================。 实验用 DSP 控制实验板数码管。 DSP 用 I/O 指令对 CPLD 地址 100010005 写数据,分别对应 Digtal05。 ========================================================= .mmregs .def main。 主程序入口 .ref Timer0Init。 Timer0 初始化子程序。 数据管地址 Digital0 .set 1000H。 数据管 1 Digital1 .set 1001H。 数据管 2 Digital2 .set 1002H。 数据管 3 Digital3 .set 1003H。 数据管 4 Digital4 .set 1004H。 数据管 5 Digital5 .set 1005H。 数据管 6 DotPoint .set 1006H。 小数点 LED .set 1007H。 LED STACK .usect STACK,10H。 分配堆栈空间 .data DATA: .word 1,2,3,4,5,6。 测试数据 Dot_DATA: .word 010101b。 LED_DATA: .word 0101010b .text main: STM。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。