欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何為PIC或AVR MCU編寫裸機代碼

星星科技指導員 ? 來源:Microchip ? 作者:Microchip ? 2023-04-20 09:45 ? 次閱讀

本文介紹了對稱應用筆記PIC1000和AVR1000b,展示了它們?nèi)绾螒糜诜欠驳?a href="http://www.delux-kingway.cn/tags/mplab/" target="_blank">MPLAB?代碼配置器(MCC)生成的代碼。本文將介紹如何使用這些應用筆記來查看MCC的幕后情況,作為生成的裸機代碼的參考。或者,如果您從裸機應用筆記開始,學習如何從頭開始編寫裸機代碼,本文將向您展示如何更自信、更靈活地將這些知識應用于 MCC 設計。這是您的選擇!應用筆記詳細描述了每種架構(gòu)的命名約定和寄存器訪問方法的原因,以幫助您理解低級PIC?和AVR? MCU代碼之間的差異。無論您如何進行設計,您都能夠快速編寫裸機 C 代碼并了解 MCC 生成的驅(qū)動程序。

為您的應用選擇 MCU(基于差異化外設,而不是特定 MCU 系列的經(jīng)驗)

Microchip結(jié)合了令人印象深刻的PIC和AVR微控制器(MCU)系列,擁有市場領先的8位MCU系列。作為嵌入式工程師,理想情況下,為給定項目選擇MCU取決于哪種器件(外設)最能實現(xiàn)應用中難以實現(xiàn)的功能。通常,這是由該MCU上差異化外圍設備的組合決定的。例如,您可能有嚴格的模擬測量應用要求,需要仔細檢查MCU的模數(shù)轉(zhuǎn)換器ADC)。在一個應用中,PIC MCU的10位模數(shù)轉(zhuǎn)換器(ADCC)外設(視頻)可能具有優(yōu)勢,因為支持各種類型的內(nèi)核獨立后采樣計算。對于另一個應用,AVR MCU 的 12 位差分 ADC 可能因其分辨率或與 AVR MCU 的事件系統(tǒng)配合使用而具有優(yōu)勢。兩種ADC均提供相對專業(yè)化的功能,根據(jù)應用要求提供某些優(yōu)勢。

通常,熟悉的生態(tài)系統(tǒng)的支持會對MCU的選擇產(chǎn)生重大影響。為了專注于為其設計選擇最佳的MCU和外設,在過去幾年中,我們付出了巨大的努力來調(diào)整PIC和AVR MCU產(chǎn)品系列的工具支持。Microchip仍然致力于支持Atmel Studio 7和Atmel START生態(tài)系統(tǒng)中的新AVR設備。除此之外,AVR MCU還被添加到MPLAB X集成開發(fā)環(huán)境(IDE)和MPLAB代碼配置器(MCC)中,統(tǒng)一了這些MCU系列之間的開發(fā)體驗。通用工具生態(tài)系統(tǒng)的支持旨在讓您快速使用新的MCU系列,從而大大降低探索的障礙。然而,對于嵌入式開發(fā)人員來說,使用MCU進行舒適的開發(fā)比工具生態(tài)系統(tǒng)更深入,一直到寄存器級或裸機編碼。

了解項目中的所有代碼

MPLAB 代碼配置器 (MCC) 或 Atmel START 等代碼生成工具是節(jié)省大量設計時間的絕佳方法。但是,如果您不了解這些工具生成的代碼,您可能永遠不會完全適應它們。具有諷刺意味的是,您可能只有在不再需要該工具時才信任它。作為嵌入式開發(fā)人員,您也知道,如果不至少自己修改一些寄存器級代碼,就不太可能進入生產(chǎn)環(huán)境。

裸機編碼:使用器件數(shù)據(jù)表和頭文件作為主要編程參考

MCU由多個構(gòu)建模塊或模塊組成:CPU、SRAM、閃存、EEPROM和外設(例如ADC)。這些都在器件數(shù)據(jù)手冊中定義,可通過寄存器進行配置。“裸機編碼”中對“金屬”的引用是指器件寄存器,因此它是指編寫配置 MCU 模塊所需的寄存器級代碼的做法。此寄存器級代碼的形式受器件頭文件的影響,而器件頭文件又受MCU外設模塊結(jié)構(gòu)的影響(數(shù)據(jù)手冊)。因此,高效編寫裸機代碼需要具備數(shù)據(jù)表模塊結(jié)構(gòu)以及頭文件定義的工作知識。因此,除了代碼示例外,在此級別進行開發(fā)的主要編程參考通常是MCU數(shù)據(jù)手冊和器件頭文件。

裸機編碼是一種嵌入式開發(fā)技能,往往在同一MCU系列的多個項目過程中掌握。對于特定的MCU,工程師熟悉MCU系列的數(shù)據(jù)表模塊和頭文件的隱式模式。了解這些模式有助于該MCU系列的快速開發(fā),但也會產(chǎn)生選擇不同MCU的阻力,即使它可能更適合新項目。隨著時間的推移,能夠快速處理與頭文件定義相關的命名約定,使工程師能夠利用現(xiàn)代 IDE 的代碼完成功能,例如 MPLAB X IDE(或 Atmel Studio)。

雖然本文中使用的示例引用了 MCC 中的代碼,但這些課程同樣適用于從頭開始編寫代碼。MCC 生成的項目的編碼樣式和項目結(jié)構(gòu)可能與您自己實現(xiàn)的項目不同。但是,在寄存器級別,MCC 生成的代碼與手動編碼的代碼非常相似。因此,MCC生成的代碼被用作示例上下文,通過我們從PIC1000和AVR1000b應用筆記中了解到的內(nèi)容,探索PIC和AVR MCU寄存器級代碼之間的差異。在此過程中,我們還將指出一些您可能不知道的有趣的 MPLAB X IDE 編輯器功能。

MCC ADC 驅(qū)動器,用于 PIC MCU(帶計算功能的 ADC)和 AVR MCU(12 位差分 ADC)

MCC 中的外設驅(qū)動程序完全支持模塊的功能,包括可能促使您選擇 MCU 的所有差異化功能。因此,無論您是否決定在生產(chǎn)中使用此生成的代碼,MCC 都是快速評估這些外圍設備性能的好方法。下圖列出了PIC和AVR MCU的ADC外設驅(qū)動器的所有API功能。如您所見,由于外圍功能不同,因此 API 自然也不同。但是,在基本級別上,它們?nèi)匀皇茿DC驅(qū)動程序,因此具有通用功能,因此具有許多通用API。例如,如果您只是對獲得ADC結(jié)果感興趣,則在這兩種情況下,您只需調(diào)用:ADCx_GetConversionResult()。

圖1: 為帶計算的ADC提供API(PIC18F47Q10)和帶窗口的ADC(AVR128DA48);在此處查看圖 1 的高分辨率版本。

pYYBAGRAnaeAR14YAAYhwccZkbs833.png

注意:圖 1 中顯示的導航器默認位于項目儀表板旁邊。它也可以從MPLAB X IDE的右上角搜索欄中打開。

圖 2 中 MCC 生成的 ADCx_GetConversionResult() 代碼清單顯示了此函數(shù)在 PIC18F47Q10 和 AVR128DA48 上的各自實現(xiàn)。MCC 驅(qū)動程序往往相對平坦。函數(shù)很少調(diào)用其他函數(shù),但如果它們調(diào)用其他函數(shù),它們往往緊鄰。請注意函數(shù)中的代碼如何使用寄存器級代碼直接實現(xiàn)所需的功能,類似于您可能手動編寫的代碼。

在大多數(shù)情況下,MCC 生成的代碼是根據(jù)為相應 MCU 系列編寫代碼的標準最佳實踐方式量身定制的。因此,編碼風格與Microchip應用工程師手寫的應用筆記或技術(shù)簡報中的代碼非常相似。但是,您還會注意到PIC MCU的代碼與AVR MCU的代碼之間存在顯著差異。

圖 2:MCC 生成的 ADC 驅(qū)動器功能代碼,在給定通道(PIC 和 AVR MCU)上返回轉(zhuǎn)換結(jié)果;在此處查看圖 2 的高分辨率版本。

poYBAGRAnZSAbMcWAAQjczJnD7k490.png

PIC1000和AVR1000b應用筆記的背景和動機

在Microchip,精通為PIC或AVR MCU編寫裸機代碼的應用工程師最初依賴于MCC或Atmel START等工具,他們不會自然地無縫過渡到另一個。就我自己而言,在Microchip位于挪威的特隆赫姆辦事處(AVR MCU的故鄉(xiāng))工作,我更有信心將MCC用于AVR MCU,而不是PIC MCU。正如我上面描述的,只有當您可以編寫它們自己生成的代碼時,人們才能 100% 適應這些工具。由于我發(fā)現(xiàn)為 PIC MCU 編寫基本的裸機代碼非常具有挑戰(zhàn)性,因此這是意料之中的。此外,代碼完成只有在您知道模式后才有效,因此在嘗試編寫寄存器級 PIC MCU 代碼時,我得到的幫助非常少,令人沮喪。

圖3:啟動ADC轉(zhuǎn)換的代碼完成幫助(適用于PIC和AVR MCU);在此處查看圖 3 的高分辨率版本。

poYBAGRAnY6AT6skAAbSh4K6WV0915.png

涵蓋該主題的經(jīng)典應用筆記是AVR1000:為XMEGA編寫C代碼入門。這是在2008年發(fā)布的,當時對當時新的AVR MCU系列XMEGA的(外設)模塊結(jié)構(gòu)和頭文件進行了擴展和改進。這些相同的約定在內(nèi)部應用于此后發(fā)布的所有新AVR MCU設備。在描述所有新AVR MCU器件的C代碼編寫模式方面,本應用筆記可能并不明顯。此外,還需要某種形式的文檔來幫助理解寄存器級PIC和AVR MCU代碼之間的差異。

為了利用AVR或PIC MCU的現(xiàn)有經(jīng)驗,我們創(chuàng)建了兩個應用筆記。它們被設計為并排讀取,以便熟悉其中一種架構(gòu)的客戶(或Microchip應用工程師)可以輕松發(fā)現(xiàn)兩者之間的差異,并更快地啟動和運行另一種架構(gòu)。

讓我們探討這些對稱應用筆記,它們旨在幫助理解低級PIC和AVR MCU代碼之間的差異:

● AVR1000b:AVR C 代碼入門

● PIC1000:開始編寫 PIC16 和 PIC18 的 C 代碼

以下各節(jié)給出了PIC1000和AVR1000b應用筆記各章節(jié)中涵蓋的內(nèi)容示例:

● 第 1 章:數(shù)據(jù)表模塊結(jié)構(gòu)和命名約定

● 第 2 章:頭文件中的模塊表示

第3章:為PIC和AVR MCU編寫C代碼(PIC1000和AVR1000b)

● 第 4 章:展示代碼編寫替代方法的應用示例

第1章:數(shù)據(jù)表模塊結(jié)構(gòu)和命名約定(PIC1000和AVR1000b)

裸機編碼熟練程度不容易從一個MCU產(chǎn)品系列轉(zhuǎn)換為另一個MCU產(chǎn)品系列的至少部分原因是數(shù)據(jù)表模塊的組織模式往往是隱式的,并且通常需要推斷命名約定。

每個章節(jié)的第一章都試圖通過對模塊組織和命名約定提供明確的指導來解決這個問題。

圖 4:PIC 和 AVR MCU 的寄存器命名約定(摘自 PIC1000、AVR1000b);在此處查看圖 4 的高分辨率版本。

poYBAGRAnYaARNPWAAV-JpwZsZU763.png

例如,讓我們考慮AVR和PIC MCU相對于ADC控制寄存器的寄存器命名約定。

圖 5:AVR 和 PIC MCU 的 ADC 寄存器摘要摘錄;在此處查看圖 5 的高分辨率版本。

poYBAGRAnX6AAg7mAAXR3ikiEcw120.png

在 MPLAB X IDE(或 Atmel Studio 7)上工作時,可以使用 IO 視圖找到寄存器、位和位字段的有用工作視圖。如果啟動調(diào)試會話,您將能夠直接操作寄存器位,例如打開/關閉電路板上的LED。

圖 6:使用 IO 視圖查看模塊寄存器、位和位字段。在調(diào)試模式下,此狀態(tài)將為實時和交互式;在此處查看圖 6 的高分辨率版本。

poYBAGRAnXiAOsCwAAWIdJBRpx8475.png

注意:您還可以使用 IO View 作為使用數(shù)據(jù)表的更有效方式,方法是選擇寄存器,然后單擊 pdf 圖標。這將在該寄存器的上下文中打開數(shù)據(jù)表的 HTML 版本。最新的 PIC 和 AVR 設備支持此上下文幫助。

此外,對于AVR MCU,您還可以使用編輯器瀏覽HTML數(shù)據(jù)表。這是通過選擇外圍設備來完成的。注冊,然后單擊 PDF 數(shù)據(jù)表圖標,請參見圖 7。另請參閱 MPLAB? X - 上下文數(shù)據(jù)表幫助和 AVR? 中斷(2 分 38 秒)。

圖 7:來自 IO 視圖(以及來自 AVR 編輯器)的數(shù)據(jù)表上下文幫助;在此處查看圖 7 的高分辨率版本。

pYYBAGRAnXKARlPBAAcrEA1vP1I518.png

第2章:頭文件中的模塊表示(PIC1000和AVR1000b)

在本章中,您將找到PIC和AVR MCU的各種器件頭文件定義的摘要,例如結(jié)構(gòu)、聯(lián)合和位字段掩碼。這些定義將確定在為設備編寫代碼時將獲得哪些代碼完成幫助。使用這些定義,您的代碼將比簡單地將十六進制值分配給寄存器更具可讀性。即使您注釋了代碼,如果注釋已過時,也可能具有很難調(diào)試的代碼。

讓我們再次考慮圖 1 中使用的代碼完成示例。

對于PIC MCU,ADCON0寄存器中位的原因碼完成選項是由于ADCON0bits_t的類型定義,由器件頭文件中的結(jié)構(gòu)和聯(lián)合位字段定義組成。

對于AVR MCU,代碼完成之所以建議ADC模塊的ADC0實例中的寄存器列表,是因為定義了ADC_t結(jié)構(gòu),該結(jié)構(gòu)由ADC模塊中的所有寄存器組成。

圖 8:由于位域定義 (PIC MCU) 和ADC_t結(jié)構(gòu) (AVR MCU) 以及 AVR/PIC MCU 頭文件中的代碼完成;在此處查看圖 8 的高分辨率版本。

pYYBAGRAnWuAP8IDAATh0BCsabw570.png

注意:AVR MCU模塊的寄存器名稱不是唯一的,即MCU中可能有多個ADC模塊實例,此外可能有多個類型的模塊具有CTRLA寄存器。因此,對于AVR MCU,寄存器僅在特定模塊實例的上下文中完全定義。但是,PIC MCU在寄存器名稱中內(nèi)置了模塊和實例,即ADCON1。

注意:對于 AVR MCU,可以選擇模塊實例寄存器定義。

圖 9:AVR MCU 的模塊實例寄存器定義;在此處查看圖 9 的高分辨率版本。

poYBAGRAnWWAVetCAACf2TbhUxU049.png

第3章:為PIC或AVR MCU編寫C代碼(PIC1000和AVR1000b)

相關應用筆記的本章介紹了與器件寄存器寫入相關的一些關鍵用例。使用第 2 章中討論的設備頭文件中的各種構(gòu)造,給出了以下用例的最佳實踐建議:

● 設置和清除寄存器位

● 配置寄存器位字段

● 更新/更改寄存器位字段

請注意,更新寄存器與設備重置后處于已知狀態(tài)時該寄存器的初始配置不同。為了僅更新預期的位或位字段,需要考慮讀取-修改-寫入注意事項。

在本文使用的示例中,MCC 生成的代碼編寫如下,但是,有幾種替代方法。

第 4 章:展示代碼編寫替代方法的應用示例

在本章中,為編寫寄存器級代碼的每種替代樣式提供了代碼清單。使用一個簡單的應用程序,配置引腳,然后在按下按鈕時打開LED。然后針對應用筆記的PIC MCU和AVR MCU版本支持的每種不同編碼樣式提供代碼清單。這些代碼清單可能是促進公司代碼樣式討論的有用參考。例如,如果您正在規(guī)劃同時使用 PIC 和 AVR MCU 的項目,那么位掩碼或位位置樣式可能允許 AVR 和 PIC MCU 之間的代碼非常相似。

總結(jié)

這些對稱應用筆記《為PIC/AVR編寫C代碼》(PIC1000和AVR1000b)旨在幫助工程師更輕松地編寫可讀寄存器級C代碼,具體做法是:

在器件數(shù)據(jù)表中顯式定義模塊模式和命名約定

描述每個MCU模塊的器件頭文件結(jié)構(gòu)和定義

提供訪問和操作寄存器的最佳實踐編碼樣式示例

無論您是從頭開始編碼,還是試圖更好地理解 MCC 或 Atmel START 生成的代碼,或者希望通過權(quán)衡選項做出明智的編碼風格決策,它們都應該很有用。此外,這些應用筆記并排使用,有助于理解低級PIC和AVR MCU代碼之間的差異。

具體來說,已經(jīng)嘗試理解MCC生成的代碼,并充分利用MPLAB X IDE功能,如代碼完成和IO視圖,以便編寫易于閱讀的最佳實踐C代碼。視頻中演示了其中許多MPLAB X IDE功能:MPLAB? X - 上下文數(shù)據(jù)表幫助和AVR中斷,在編寫按下按鈕時打開LED所需的裸機AVR?代碼的過程中。

因此,如果您習慣于為 PIC 或 AVR MCU 編寫裸機代碼,為什么不嘗試在另一個上獲取基礎知識呢?

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7664

    瀏覽量

    152197
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17362

    瀏覽量

    352846
  • PIC
    PIC
    +關注

    關注

    8

    文章

    507

    瀏覽量

    87868
收藏 人收藏

    評論

    相關推薦

    利用Microchip 全新的 PIC?和AVR? MCU在閉環(huán)控制應用中提高系統(tǒng)性能

    通過改進架構(gòu),PIC?和AVR? 8位單片機(MCU) 針對閉環(huán)控制進行了優(yōu)化,讓系統(tǒng)能夠降低中央處理器 (CPU) 的負載,從而管理更多任務并實現(xiàn)節(jié)能。
    的頭像 發(fā)表于 06-01 10:51 ?8107次閱讀

    基于pic 32的遠程控制怎么編寫代碼?

    你好,我想用PIC 32編寫一個遠程控制代碼。任何一個都有例子代碼任何有用的鏈接。
    發(fā)表于 08-23 10:37

    如何實現(xiàn)這個以及如何為編寫vhdl代碼

    就可以將它用作ADC的輸入時鐘。任何人都可以建議如何實現(xiàn)這個以及如何為編寫vhdl代碼。示例代碼..謝謝
    發(fā)表于 06-18 12:18

    如何去編寫開源avr下載線的源代碼

    如何去自制一種開源的avr下載線?如何去編寫開源avr下載線的源代碼
    發(fā)表于 09-18 08:40

    AVR編寫的矩陣按鍵

    AVR編寫的矩陣按鍵
    發(fā)表于 03-20 11:07 ?5次下載

    使用AVR單片機編寫的花樣流水燈循環(huán)方式代碼資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用AVR單片機編寫的花樣流水燈循環(huán)方式代碼資料免費下載。
    發(fā)表于 11-12 08:00 ?5次下載
    使用<b class='flag-5'>AVR</b>單片機<b class='flag-5'>編寫</b>的花樣流水燈循環(huán)方式<b class='flag-5'>代碼</b>資料免費下載

    使用AVR單片機編寫的花樣流水燈操作方式代碼資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用AVR單片機編寫的花樣流水燈二位操作方式代碼資料免費下載。
    發(fā)表于 11-12 08:00 ?5次下載
    使用<b class='flag-5'>AVR</b>單片機<b class='flag-5'>編寫</b>的花樣流水燈操作方式<b class='flag-5'>代碼</b>資料免費下載

    使用AVR單片機編寫的讀出讀入的應用代碼詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用AVR單片機編寫的讀出讀入的應用代碼詳細資料免費下載。
    發(fā)表于 11-12 08:00 ?3次下載
    使用<b class='flag-5'>AVR</b>單片機<b class='flag-5'>編寫</b>的讀出讀入的應用<b class='flag-5'>代碼</b>詳細資料免費下載

    使用AVR單片機編寫的宏定義的應用代碼詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的使用AVR單片機編寫的宏定義的應用代碼詳細資料免費下載。
    發(fā)表于 11-12 08:00 ?3次下載
    使用<b class='flag-5'>AVR</b>單片機<b class='flag-5'>編寫</b>的宏定義的應用<b class='flag-5'>代碼</b>詳細資料免費下載

    使用AVR單片機編寫的中斷代碼詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用AVR單片機編寫的中斷代碼詳細資料免費下載。
    發(fā)表于 11-12 08:00 ?13次下載
    使用<b class='flag-5'>AVR</b>單片機<b class='flag-5'>編寫</b>的中斷<b class='flag-5'>代碼</b>詳細資料免費下載

    使用AVR單片機編寫的16按鍵代碼詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用AVR單片機編寫的16按鍵代碼詳細資料免費下載。
    發(fā)表于 11-12 08:00 ?12次下載
    使用<b class='flag-5'>AVR</b>單片機<b class='flag-5'>編寫</b>的16按鍵<b class='flag-5'>代碼</b>詳細資料免費下載

    使用AVR編寫的多位數(shù)碼管代碼和電路原理圖資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用AVR編寫的多位數(shù)碼管代碼和電路原理圖資料免費下載。
    發(fā)表于 11-12 08:00 ?17次下載
    使用<b class='flag-5'>AVR</b><b class='flag-5'>編寫</b>的多位數(shù)碼管<b class='flag-5'>代碼</b>和電路原理圖資料免費下載

    AVR PIC仿真軟件simulinkIDE和源碼免費下載

    本文檔的主要內(nèi)容詳細介紹的是AVR PIC仿真軟件SimulIDE和源代碼免費下載。
    發(fā)表于 05-27 12:15 ?48次下載
    <b class='flag-5'>AVR</b> <b class='flag-5'>PIC</b>仿真軟件simulinkIDE和源碼免費下載

    何為一個PIC單片機編寫中斷服務程序

    問:我應該如何為一個PIC單片機編寫中斷服務程序? 答:僅僅是用一個'interrupt'關鍵詞聲明一個函數(shù)就好了。編譯器會把它放到合適的位置,并且會注意所有的寄存器保護和恢復。 這里有一個中
    的頭像 發(fā)表于 01-22 15:16 ?1775次閱讀

    AVR1000b:編寫用于AVR MCU的C代碼入門

    電子發(fā)燒友網(wǎng)站提供《AVR1000b:編寫用于AVR MCU的C代碼入門.pdf》資料免費下載
    發(fā)表于 09-19 14:22 ?2次下載
    <b class='flag-5'>AVR</b>1000b:<b class='flag-5'>編寫</b>用于<b class='flag-5'>AVR</b> <b class='flag-5'>MCU</b>的C<b class='flag-5'>代碼</b>入門