STC8A8K64D4 DMA功能使用

作者

QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118

STC从STC8A8K64D4单片机开始才有DMA,STC8A4K64S2A12就没有DMA。为什么要用DMA?项目里单片机需要串口通信,通信数据量很大,不采用DMA,导致CPU被串口通信占用,无法实时控制IO,所以需要用DMA来控制串口,这样CPU读取和输出IO可以做到1ms以内,满足实时性的要求。

参考

关于中断号大于31在Keil中编译出错的处理

使用

主要是处理中断问题,默认keil的编译器,不支持超过32的中断号,所以,DMA的中断需要使用特殊方法来实现,一个是打补丁,一个是自建汇编文件处理中断,这里还有多种方法,我选用占用未使用中断号的地址空间来处理DMA中断,比如,0~31号中断中,第13号是保留中断号(或者未使用的中断,如INT0),我们可以借用此中断号,新建一个汇编语言文件,比如isr.asm,加入到项目,并在地址0103H的地方添加一条LJMP 006BH,官方提供的ism文件,最后面那句LJMP 006BH就是为interrupt 13服务的,如果是interrupt 0,则是LJMP 0003H

        CSEG    AT  012BH           ;P0INT_VECTOR
        JMP     P0INT_ISR
        CSEG    AT  0133H           ;P1INT_VECTOR
        JMP     P1INT_ISR
        CSEG    AT  013BH           ;P2INT_VECTOR
        JMP     P2INT_ISR
        CSEG    AT  0143H           ;P3INT_VECTOR
        JMP     P3INT_ISR
        CSEG    AT  014BH           ;P4INT_VECTOR
        JMP     P4INT_ISR
        CSEG    AT  0153H           ;P5INT_VECTOR
        JMP     P5INT_ISR
        CSEG    AT  015BH           ;P6INT_VECTOR
        JMP     P6INT_ISR
        CSEG    AT  0163H           ;P7INT_VECTOR
        JMP     P7INT_ISR
        CSEG    AT  016BH           ;P8INT_VECTOR
        JMP     P8INT_ISR
        CSEG    AT  0173H           ;P9INT_VECTOR
        JMP     P9INT_ISR
        CSEG    AT  017BH           ;M2MBMM_VECTOR
        JMP     M2MBMM_ISR
        CSEG    AT  0183H           ;ADCBMM_VECTOR
        JMP     ADCBMM_ISR
        CSEG    AT  018BH           ;SPIBMM_VECTOR
        JMP     SPIBMM_ISR
        CSEG    AT  0193H           ;U1TXBMM_VECTOR
        JMP     U1TXBMM_ISR
        CSEG    AT  019BH           ;U1RXBMM_VECTOR
        JMP     U1RXBMM_ISR
        CSEG    AT  01A3H           ;U2TXBMM_VECTOR
        JMP     U2TXBMM_ISR
        CSEG    AT  01ABH           ;U2RXBMM_VECTOR
        JMP     U2RXBMM_ISR
        CSEG    AT  01B3H           ;U3TXBMM_VECTOR
        JMP     U3TXBMM_ISR
        CSEG    AT  01BBH           ;U3RXBMM_VECTOR
        JMP     U3RXBMM_ISR
        CSEG    AT  01C3H           ;U4TXBMM_VECTOR
        JMP     U4TXBMM_ISR
        CSEG    AT  01CBH           ;U4RXBMM_VECTOR
        JMP     U4RXBMM_ISR
        CSEG    AT  01D3H           ;LCMBMM_VECTOR
        JMP     LCMBMM_ISR
        CSEG    AT  01DBH           ;LCMIF_VECTOR
        JMP     LCMIF_ISR

P0INT_ISR:
P1INT_ISR:
P2INT_ISR:
P3INT_ISR:
P4INT_ISR:
P5INT_ISR:
P6INT_ISR:
P7INT_ISR:
P8INT_ISR:
P9INT_ISR:
M2MBMM_ISR:
ADCBMM_ISR:
SPIBMM_ISR:
U1TXBMM_ISR:
U1RXBMM_ISR:
U2TXBMM_ISR:
U2RXBMM_ISR:
U3TXBMM_ISR:
U3RXBMM_ISR:
U4TXBMM_ISR:
U4RXBMM_ISR:
LCMBMM_ISR:
LCMIF_ISR:

        JMP     006BH

        END
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值