• AVR GCC对端口的操作指南


    1. AVR GCC for AVR

    I.I/O端口API
    1. BV
    用法:BV(pos);
    说明:将位定义转换成屏蔽码(MASK)。与头文件io.h里的位定义一起使用。例如,置位WDTOE和WDE可表示为“BV(WDTOE) | BV(WDE)”
    2. bit_is_clear
    用法:uint8_t bit_is_clear(uint8_t port, uint8_t bit);
    描述:如果port的bit位清零则返回1。此函数调用sbic指令,故port应为有效地址。
    3.bit_is_set
    用法:uint8_t bit_is_set(uint8_t port, uint8_t bit);
    描述:如果port的bit位置位则返回1。此函数调用sbis指令,故port应为有效地址。
    4.cbi
    用法:void cbi(uint8_t port, uint8_t bit);
    说明:清零port的bit位。bit的值为0~7。如果port为实际I/O寄存器,则此函数生成一条cbi指令;否则,函数生成相应的优化代码。
    5.inp
    用法:uint8_t inp(uint8_t port);
    说明:从端口port读入8比特的数值。如果port为常数,则函数生成一条in指令;若为变量,则函数用直接寻址指令。
    6.__inw
    用法:uint16_t __inw(uint8_t port);
    说明:从I/O寄存器读入16位的数值。此函数用于读取16位寄存器(ADC,ICR1,OCR1,TCNT1)的值,因为读取这些寄存器需要合适的步骤。由于此函数只产生两条汇编指令,因此要在中断禁止时使用,否则有可能由于中断插入到指令之间造成读取错误。
    7.__inw_atomic
    用法:uint16_t __inw_atomic(uint8_t port);
    说明:以原子语句方式读取16位I/O寄存器的数值。此函数首先禁止中断,读取数据之后再恢复中断状态,因此可以安全地应用在各种系统状态。
    8.loop_until_bit_is_clear
    用法:oidoid loop_until_bit_is_clear (uint8_t port, uint8_t bit);
    说明:此函数简单地调用sbic指令来测试端口port的bit位是否清零。port必须为有效端口。
    9.loop_until_bit_is_set
    用法:oidoid loop_until_bit_is_set (uint8_t port, uint8_t bit);
    说明:此函数简单地调用sbis指令来测试端口port的bit位是否置位。port必须为有效端口。
    10.outp
    用法:void outp(uint8_t val, uint8_t port);
    说明:将val写入端口port。如果port为常数,则函数生成一条out指令;若为变量,则函数用直接寻址指令。
    11.__outw
    用法:void __outw(uint16_t val, uint8_t port);
    说明:将16位的val写入端口port。此函数适合于操作16位寄存器,如ADC,ICR1,OCR1,TCNT1。由于此函数只产生两条汇编指令,因此要在中断禁止时使用,否则有可能由于中断插入到指令之间造成读取错误。
    12.__outw_atomic
    用法:void __outw_atomic(uint16_t val, uint8_t port);
    说明:将16位的val写入端口port。此函数适合于操作16位寄存器,如ADC,ICR1,OCR1,TCNT1。此函数首先禁止中断,读取数据之后再恢复中断状态,因此可以安全地应用在各种系统状态。
    13.sbi
    用法:void sbi(uint8_t port, uint8_t bit);
    说明:置位port的bit位。bit的值为0~7。如果port为实际I/O寄存器,则此函数生成一条 sbi指令;否则,函数生成相应的优化代码。
    五.看门狗API
    以下函数操作看门狗。宏定义参见wdt.h。
    用户可以通过起动代码初始化看门狗。WDTCR的缺省值为0。如果你希望将其设置为其他值,则需要在链接命令里加入相应的命令。使用的符号为__init_wdtcr__。如下为将WDTCR设置为0x1f的例子:
    avr-ld –defsym __init_wdtcr__=0x1f
    1. wdt_disable
    用法:void wdt_disable(void);
    说明:关闭看门狗。
    2. wdt_enable
    用法:void wdt_enable(unit8_t timeout);
    说明:使能看门狗。看门狗溢出时间为timeout。
    timeout 周期
    0 16K CLK
    1 32K CLK
    2 64K CLK
    3 128K CLK
    4 256K CLK
    5 512K CLK
    6 1024K CLK
    7 2048K CLK

    3. wdt_reset
    用法:void wdt_reset(void);
    说明:产生喂狗指令wdr。
     
    附录:AVR-GCC配置
    汇编选项
    选项 描述
    -mmcu=name 指定目标器件
    name可以为:at90s1200,at90s2313,at90s2323,at90s2333,at90s2343,at904433,at90s8515,at90s8535,atmega103,atmega161
    寄存器使用
    如果用户需要进行汇编与C的混合编程,必须了解寄存器的使用。
    1.寄存器使用
    r0  可用做暂时寄存器。如果用户汇编代码使用了r0,且要调用C代码,则在调用之前必须保存r0。C中断例程会自动保存和恢复r0。
    r1  C编译器假定此寄存器内容为“0”。如果用户使用了此寄存器,则在汇编代码返回之前须将其清零。C中断例程会自动保存和恢复r1。
    r2-r17,r28,r29  C编译器使用这些寄存器。如果用户汇编代码需要使用这些寄存器,则必须保存并恢复这些寄存器。
    R18-r27,r30,r31 如果用户汇编代码不调用C代码则无需保存和恢复这些寄存器。如果用户要调用C代码,则在调用之前须保存。
    2.函数调用规则
    参数表:函数的参数由左至右分别分配给r25到r8。每个参数占据偶数个寄存器。若参数太多以至r25到r8无法容纳,则多出来的参数将放入堆栈。
    返回值:8位返回值存放在r24。16位返回值存放在r25:r24。32位返回值存放在r25:r24:r23:r22。64位返回值存放在r25:r24:r23:r22:r21:r20:r19:r18。

    2.Keil for MCS51

    sbit LED=P1^0

  • 相关阅读:
    2. jvm-sandbox之结构和状态
    1. jvm-sandbox之小试牛刀
    redux中间件来执行异步操作
    redux
    vue简单插件
    VUE搭建
    用element-ui进行文件的上传
    完整的node脚手架搭建服务
    使用node来搭建简单的后台业务
    解决vuex数据页面刷新后初始化问题
  • 原文地址:https://www.cnblogs.com/akira90/p/3253829.html
Copyright © 2020-2023  润新知