色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          如何使用AVR-GCC API

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

          4.cbi
          用法:void cbi(uint8_t port, uint8_t bit);
          說(shuō) 明:清零port的bit位。bit的值為0~7。如果port為實(shí)際I/O寄存器,則此函數(shù)生成一條cbi指令;否則,函數(shù)生成相應(yīng)的優(yōu)化代碼。
          5.inp
          用 法:uint8_t inp(uint8_t port);
          說(shuō)明:從端口port讀入8比特的數(shù)值。如果port為常數(shù),則函數(shù)生成一條in指 令;若為變量,則函數(shù)用直接尋址指令。
          6.__inw
          用法:uint16_t __inw(uint8_t port);
          說(shuō)明: 從I/O寄存器讀入16位的數(shù)值。此函數(shù)用于讀取16位寄存器(ADC,ICR1,OCR1,TCNT1)的值,因?yàn)樽x取這些寄存器需要合適的步驟。由于 此函數(shù)只產(chǎn)生兩條匯編指令,因此要在中斷禁止時(shí)使用,否則有可能由于中斷插入到指令之間造成讀取錯(cuò)誤。
          7.__inw_atomic
          用 法:uint16_t __inw_atomic(uint8_t port);
          說(shuō)明:以原子語(yǔ)句方式讀取16位I/O寄存器的數(shù)值。此函數(shù)首先 禁止中斷,讀取數(shù)據(jù)之后再恢復(fù)中斷狀態(tài),因此可以安全地應(yīng)用在各種系統(tǒng)狀態(tài)。
          8.loop_until_bit_is_clear
          用 法:oidoid loop_until_bit_is_clear (uint8_t port, uint8_t bit);
          說(shuō)明:此函數(shù)簡(jiǎn) 單地調(diào)用sbic指令來(lái)測(cè)試端口port的bit位是否清零。port必須為有效端口。
          9.loop_until_bit_is_set
          用 法:oidoid loop_until_bit_is_set (uint8_t port, uint8_t bit);
          說(shuō)明:此函數(shù)簡(jiǎn)單地 調(diào)用sbis指令來(lái)測(cè)試端口port的bit位是否置位。port必須為有效端口。
          10.outp
          用法:void outp(uint8_t val, uint8_t port);
          說(shuō)明:將val寫(xiě)入端口port。如果port為常數(shù),則函數(shù)生成一條out 指令;若為變量,則函數(shù)用直接尋址指令。
          11.__outw
          用法:void __outw(uint16_t val, uint8_t port);
          說(shuō)明:將16位的val寫(xiě)入端口port。此函數(shù)適合于操作16位寄存器,如ADC,ICR1,OCR1,TCNT1。由于此函數(shù) 只產(chǎn)生兩條匯編指令,因此要在中斷禁止時(shí)使用,否則有可能由于中斷插入到指令之間造成讀取錯(cuò)誤。
          12.__outw_atomic
          用 法:void __outw_atomic(uint16_t val, uint8_t port);
          說(shuō)明:將16位的val寫(xiě)入端口 port。此函數(shù)適合于操作16位寄存器,如ADC,ICR1,OCR1,TCNT1。此函數(shù)首先禁止中斷,讀取數(shù)據(jù)之后再恢復(fù)中斷狀態(tài),因此可以安全地 應(yīng)用在各種系統(tǒng)狀態(tài)。
          13.sbi
          用法:void sbi(uint8_t port, uint8_t bit);
          說(shuō)明:置位 port的bit位。bit的值為0~7。如果port為實(shí)際I/O寄存器,則此函數(shù)生成一條 sbi指令;否則,函數(shù)生成相應(yīng)的優(yōu)化代碼。
          五. 看門(mén)狗API
          以下函數(shù)操作看門(mén)狗。宏定義參見(jiàn)wdt.h。
          用戶(hù)可以通過(guò)起動(dòng)代碼初始化看門(mén)狗。WDTCR的缺省值為0。如果你希望將其設(shè) 置為其他值,則需要在鏈接命令里加入相應(yīng)的命令。使用的符號(hào)為_(kāi)_init_wdtcr__。如下為將WDTCR設(shè)置為0x1f的例子:
          avr-ld -defsym __init_wdtcr__=0x1f
          1.wdt_disable
          用法:void wdt_disable(void);
          說(shuō)明:關(guān)閉看門(mén)狗。
          2.wdt_enable
          用法:void wdt_disable(unit8_t timeout);
          說(shuō)明:使能看門(mén)狗??撮T(mén)狗溢出時(shí)間為timeout。
          timeout 周期
          016K CLK
          132K CLK
          264K CLK
          3128K CLK
          4256K CLK
          5512K CLK
          61024K CLK
          72048K CLK

          3.wdt_reset
          用 法:void wdt_reset(void);
          說(shuō)明:產(chǎn)生喂狗指令wdr。

          三.應(yīng)用程序啟動(dòng)過(guò)程(Start Up)
          標(biāo) 準(zhǔn)庫(kù)文件包含一個(gè)啟動(dòng)模塊(Start Up Module),用于為真正執(zhí)行用戶(hù)程序做環(huán)境設(shè)置。
          啟動(dòng)模塊完成的任務(wù)如下:
          1.提 供缺省向量表
          2.提供缺省中斷程序入口
          3.初始化全局變量
          4.初始化看門(mén)狗
          5.初 始化寄存器MCUCR
          6.初始化數(shù)據(jù)段
          7.將數(shù)據(jù)段.bss的內(nèi)容清零
          8.跳轉(zhuǎn)到 main()。(不用調(diào)用方式,因?yàn)閙ain()不用返回)
          啟動(dòng)模塊包含缺省中斷向量表,其內(nèi)容為預(yù)先定義好的函數(shù)名稱(chēng)。這些函數(shù)名稱(chēng)可以由程序 員重載。中斷向量表的第一個(gè)內(nèi)容為復(fù)位向量,執(zhí)行結(jié)果是將程序跳轉(zhuǎn)到_init_。在啟動(dòng)模塊里,_init_表示的地址與_real_init_指向的 地址相同。如果要加入客戶(hù)代碼,則需要在程序里定義一個(gè)_init_函數(shù)。在此函數(shù)的末尾跳轉(zhuǎn)到_real_init_。具體實(shí)現(xiàn)如下:
          void _real_init_(void);
          void _init_(void) __attribute__((naked));
          void _init_(void)
          {
          // 用戶(hù)代碼

          // 最后的代碼必須為:
          asm ("rjmp _real_init_");
          }

          在_real_init_部 分,系統(tǒng)將設(shè)置看門(mén)狗和MCUCR寄存器。啟動(dòng)模塊并沒(méi)有真正取用相應(yīng)寄存器的設(shè)置數(shù)值(以符號(hào) _init_wdctr_,_init_mcucr_,_init_emcucr_表示),而是通過(guò)地址來(lái)取得其值。因而用戶(hù)可以通過(guò)鏈接器的 --defsym選項(xiàng)來(lái)設(shè)置這些符號(hào)的地址。如果用戶(hù)沒(méi)有定義,則啟動(dòng)模塊將使用缺省值。
          接下來(lái)系統(tǒng)將從程序存儲(chǔ)器里把具有初值的全局變量加載到 數(shù)據(jù)存儲(chǔ)器SRAM。然后是將數(shù)據(jù)段.bbs清零。此數(shù)據(jù)段包含所有沒(méi)有的初值的非AUTO變量。
          最后,系統(tǒng)跳轉(zhuǎn)到main()函數(shù),用戶(hù)代碼開(kāi) 始執(zhí)行。系統(tǒng)對(duì)此特殊函數(shù)加入一些特殊的處理。進(jìn)入此函數(shù)后,堆棧指向SRAM的末尾。

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: AVR-GCCAP

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉