zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    @RequestParam注解使用:Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
    cglib动态代理导致注解丢失问题及如何修改注解允许被继承
    springboot Autowired BeanNotOfRequiredTypeException
    git根据用户过滤提交记录
    不同包下,相同数据结构的两个类进行转换
    How to use Jackson to deserialise an array of objects
    jooq实践
    java如何寻找main函数对应的类
    Python--matplotlib
    Python 和 Scikit-Learn
  • 原文地址:https://www.cnblogs.com/akira90/p/3253829.html
Copyright © 2011-2022 走看看