ARM手記之新唐M0系列


NUC1xx系列是32位的內嵌ARM Cortex-M0核的微控制器 ,適用於工業控制和需要豐富的通信接口的應用領域。ARM Cortex-M0 內核最高運行50MHz。寬電壓工作范圍 由2.5V 至 5.5V。

ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
1.ARM  Cortex-M0 內核
        Cortex-M0處理器是32位多級可配置的RISC處理器。它有AMBA AHB-Lite接口和嵌套向量中斷控制器(NVIC),具有可選的硬件調試功能,可以執行Thumb指令,並與其它Cortex-M系列兼容。支持兩種模式:Thread模式和Handler模式;異常時,系統進入Handler模式,復位時,系統進入Thread模式。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
1)基本特性:
        特征:系統支持小端(little-endian)數據訪問,提供單指令32-bit 硬件乘法器。
        NVIC:提供32個外部中斷,具有4級中斷優先級。有專用的不可屏蔽中斷NMI。支持電平和脈沖中斷觸發。中斷喚醒控制器WIC,支持極低功耗休眠模式。
        調試:提供4個硬件斷點,2個觀察點,用於非侵入式代碼分析的程序計數采樣寄存器,單步向量捕獲能力。
        總線接口:提供簡單的集成到所有系統外設和存儲器的單一32位AMBA-3 ABH-Lite系統接口;支持DAP(Debug Access Port)的單一32位的從端口。
2)外部總線接口EBI
        為節省外部設備與芯片的連接線,EBI支持地址總線與設備總線多路復用,且地址鎖存使能信號ALE支持地址和數據周期的差別。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
        支持最大外部設備64KB(8位數據寬度)/128KB(16位數據寬度),支持可變的數據訪問時間(tACC)、地址鎖存使能時間(tALE)和地址保持時間(tAHD)。
        EBI地址在0x6000 0000至0x6001 FFFF,總共內存空間為128KB,當系統申請的地址在EBI的內存空間,相應的EBI片選信號有效,EBI狀態機工作。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
        芯片內的所有EBI信號通過MCLK同步,MCLK可以設置EBICON中的MCLKDIVN分頻HCLK/32
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
2.系統管理器
1)系統復位
        復位源包括:上電復位、復位腳(/RESET)上有低電平、看門狗復位、低壓復位、欠壓檢測復位、Coretex-M0 單片機復位、系統復位。
        系統復位和上電復位使整個芯片復位,包括外設。
2)系統電源
        該器件的電源分為3類:a.由AVDD和AVSS提供的模擬電源,為模擬部分工作提供電壓;b.由VDD和VSS提供的固定的2.5V的數字電源,用於數字操作和I/O引腳的內部穩壓電源;c.VBUS提供給USB的電源,用於USB模塊傳輸操作。
        內部電壓調節器輸出LDO和VDD33,需要在相應的引腳上外接電容。
3)系統內存映射
        NUC1xx 提供4G字節的尋址空間,NUC1xx系列僅支持小端數據格式,ROM、SRAM和控制寄存器統一編址。
4)系統定時器
        Cortex-M0 包含一個24位系統定時器SysTick,使能后,定時器從SysTick 當前寄存器(SYST_CVR)的值向下計數到0,下一個時鍾邊緣,重新加載寄存器(SYST_RVR) 的值。當計數器減到0時,標志位COUNTFLAG置位,在讀數時,清COUNTFLAG標志位。
5)嵌套向量中斷控制器 (NVIC)
        Cortex-M0 提供中斷控制器,用於總體管理異常,NVIC和處理器內核緊密相連。
        NVIC結構支持32(IRQ[31:0])4級離散中斷優先級,當接受任何中斷時,ISR的開始地址可從內存的向量表中取得,當開始地址取得時,NVIC將自動保存處理狀態到棧中,包括以下寄存器“PC, PSR, LR, R0~R3, R12” 的值. 在ISR結束時, NVIC 將從棧中恢復相關寄存器的值,進行正常操作,因此花費少量時處理中斷請求。向量表的基地址為0x00000000. 向量表包括復位后棧的初始值,所有異常處理器的入口地址. 向量號表示處理異常的先后次序。
6)系統控制寄存器
        系統控制寄存器控制了Cortex?-M0的狀態和操作模式,包括CPUID、Cortex?-M0中斷優先級和Cortex?-M0電源管理。
3.時鍾控制器
        時鍾控制器為芯片提供時鍾源. 包括AMBA接口模塊和所有外圍設備時鍾,時鍾發生器由如下5個時鍾源組成:一個外部 32KHz 晶振、一個外部 12MHz 晶振、一個可編程的 PLL FOUT(PLL 由 12M 和 22M組成)、一個內部 22MHz RC 振盪器、一個內部 10KHz 振盪器。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
        時鍾源切換取決於寄存器HCLK_S(CLKSEL0[2:0]):
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
        Cortex?-M0內核的SysTick時鍾源可以選擇CPU時鍾或外部時鍾(SYST_CSR[2]),如果使用外部時鍾,SysTick時鍾(STCLK)有5個時鍾源,
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
        該器件包含分頻器,由16級2分頻移位寄存器組成. 因此有16種分頻選擇從 Fin/21 到 Fin/216 ,其中 Fin 為輸入到時鍾分頻器的時鍾頻率.
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划

4.存儲器

1)程序存儲器

 

        具有32K/64K/128K 字節的片上FLASH ROM ,用於存儲程序代碼(APROM),4kB 在系統編程 (ISP) 加載程序內存(LDROM),用於存儲ISP引導代碼,用戶可以通過ISP/IAP更新FLASH中的程序,用戶設置Config0以選擇從AP_ROM或LD_ROM開始。對於64/32K 字節的器件, NUC1XX 系列為用戶提供4k字節的數據FLASH用於存儲一些應用所需的數據; 對於128k 字節的器件,數據flash與128K的程序內存共享,其開始地址是可配置的,由用戶在Config1中定義. 用戶可以根據其應用的需要來定義數據FLASH的大小。數據FLASH的基地址由DFBADR定義

 

ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划

 

2)數據存儲器

        4K/8K/16K 字節內建SRAM,支持9通道 PDMA 用於SRAM和周邊設備的自動數據傳輸。

3)PDMA控制器

        NUC100/NUC120系列包括直接存儲器訪問(PDMA)控制器,用於APB和存儲器間的數據交換,具有 9 路DMA (外設-存儲器 或存儲器 -外設 或存儲器-存儲器) 通道,每路 PDMA 通道 (PDMA CH0~CH8), 在外設 APB IP和存儲器間有一個字的數據緩沖器,每個通道可支持一個單項傳輸。

        PDMA 運行通過軟件輪流檢測或接收到內部PDMA 中斷, CPU可以識別PDMA運作的完成,PDMA 控制器可增加源和目的地址。對於源和目的地址而言,PDMA 控制器具有兩種模式:increased和fixed模式。每個PDMA模擬通道沒有先設定,因此用戶需要通過設定PDMA_PDSSR0和 PDMA_PDSSR1先行配置每路的PDMA 通道。軟件需使能DMA通道PDMA[PDMACEN] 並且寫有效的源地址到PDMA_SARx寄存器、目的地址到PDMA_DSABx寄存器、傳輸計算數到PDMA_BCRx寄存器、以及設置DMA_CSRx PDMA[Trig_EN]觸發。PDMA將繼續傳輸直到PDMA_CBCRx為0。PDMA (外設-到-存儲器、存儲器-到-外設) 模式,DMA可以在外設APB IP (ex:UART,SPI,ADC….) 和Memory將傳遞數據。

        硬件通道優先級:DMA通道0有最高優先級,通道n有最低優先級。

 

ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划

 

        Low Density系列僅支持1個PDMA通道:

 

ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划

5.通用 I/O

        有80個通用I/O引腳,可以和其他功能引腳共享。80個引腳分配在GPIOA, GPIOB, GPIOC, GPIOD 與 GPIOE五個口上,每個口最多16個引腳。每個引腳都是獨立的,都有相應的寄存器來控制引腳模式與數據。I/O引腳上的I/O類型可由軟件獨立地配置為輸入,輸出,開漏或准雙端模式. 所有的I/O引腳默認處於准雙端模式。

        可選的TTL/Schmitt觸發輸入,支持大電流驅動/灌入I/O模式。

1)輸入模式

        設置 GPIOx_OMD(PMDn[1:0]) 為00b,GPIOx port[n]為輸入模式,I/O引腳為三態(高阻),沒有輸出驅動能力。GPIOx_PIN的值反映相當端口的狀態。

2)推挽輸出模式

        設置 GPIOx_OMD(PMDn[1:0]) 為 01b,GPIOx port [n] 為輸入模式,I/O支持數字輸出功能,有source/sink電流能力. GPIO_DOUT 相應位的值被送到相應引腳上。

 

ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 

 

3)開漏輸出模式

        設置 GPIOx_OMD(PMDn[1:0]) 為 10b,GPIOx port [n]為開漏模式,I/O支持數字輸出功能,僅有灌電流能力,需要一個外加上拉電阻驅動到高電平。

ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
4)准雙端模式
        設置GPIOx_OMD(PMDn[1:0]) 為 11b,GPIOx port [n] 為准雙端模式,I/O同時支持數字輸出和輸入功能,但source電流僅達數百uA. 要實現數字輸入,需要先將GPIOx_DOUT 相應位置1, 准雙端輸出是80C51及其派生產品所共有的模式。准雙端模式的source 電流能力僅有200uA到30uA(相應VDD的電壓從5.0V到2.5V)
 ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 

6.中斷系統

        NUC1xx 系列支持下表所列的異常模式. 與所有中斷一樣,軟件可以對其中一些中斷設置4級優先級. 最高優先級為“0”,最低優先級為“3”,所有用戶可配置的優先級的默認值為“0”. 注意:優先級為“0”在整個系統中為第4優先級,排在“Reset”, “NMI” 與“Hard Fault”之后。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
        中斷模式對應向量號為16-47,共32個中斷。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
        響應中斷時,處理器自動從向量表中取出ISR的起始地址,對於ARMv6-M, 向量表的基地址為0x00000000。向量表包括復位后棧的初始值,所有異常處理器的入口地址。

7.定時器

        定時器模塊包含4組32位定時器(包含一個8位預分頻計數器,一個24位向上計數器),TIMER0~TIMER3 (TIMER0, TIMER1位於 AHB1 ,TIMER2 和 TIMER3 位於 AHB2);各通道有獨立的時鍾源,每個通道有5個時鍾源選項。通過TDR(定時器數據寄存器)可讀取內部24位向上計數器值
        時間溢出周期= (定時器時鍾周期) * (8位預分頻值 + 1) * (24位 TCMP)
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
         定時器控制器提供one-shot(單次觸發模式)、period(周期觸發模式)、toggle(可編程時鍾輸出)、持續計數模式和事件計數器模式;
1)單次觸發模式
         一旦定時器計數器的值達到TCMPR的值,且IE置1,則定時器中斷位置位,產生中斷信號並送到NVIC通知CPU,表明定時器發生溢出,定時器計數操作停止,該比較的操作僅進行一次。
2)周期觸發模式
         一旦定時器計數器的值達到TCMPR的值,定時器計數器的值返回計數初值並再次計數,如果IE置1,則定時器中斷位置位,產生中斷信號並送到NVIC通知CPU。
3)可編程時鍾輸出模式
         一旦定時器計數器的值與TCMPR匹配,且IE置1,則定時器中斷標志位置位,產生中斷信號並送到NVIC通知CPU,相應toggle輸出信號置1,定時器計數器的值返回到計數初值,定時器計數器重新計數,如果中斷標志被軟件清除,一旦定時器計數器的值再次與TCMPR匹配,則定時器中斷標志為再次置位,產生中斷信號並送到NVIC通知CPU,相應toggle輸出信號置0;如此往復,產生占空比為50%的信號輸出。
4)持續計數模式
         產生中斷信號的產生取決於TDR==TCMPR。定時器計數器的值與TCMPR匹配后,定時器計數器繼續計數,而不返回計數初值,用戶可以通過不斷改變TCMPR值來實現計數或定時功能。
5)事件計數器
         定時器計數器的時鍾源TMRx_CLK必須設置為HCLK,可以通過設置TEXCONx[7]來使能或禁止TM0-TM3防抖動功能,以及設置TEXCONx[0]來設定TM0-TM3上升沿或下降沿計數。如果禁用計數防抖動,事件計數源頻率頻率必須小於1/3HCLK,如果使能計數防抖動,事件計數源頻率必須小於1/8HCLK,
8.串行口
         MCU提供3個UART通道,UART0支持高速,UART1~2支持普通速度,另外UART0與UART1支持流控制,UART0與UART1可以采用DMA控制器。
         通用異步收/發器(UART) 在從外設收到數據的時候執行串到並的轉換,在從CPU收到數據的時候執行並到串的轉換。該串口同時支持LIN主機模式和 IrDA SIR 功能。有7 種類型的中斷:發送FIFO 空中斷(Int_THRE)、接收極限到達中斷(Int_RDA)、線狀態中斷 (overrun error 或者校驗錯誤或者framing error或者break 中斷) (Int_RLS)、超時中斷(Int_Tout)、MODEM 狀態中斷(Int_Modem) 、喚醒狀態中斷 (Int_WakeUp)和LIN 接收停止偵測中斷。
         UART0 接口控制器一個內嵌64-byte 發送FIFO (TX_FIFO) 和 64-byte 接收 FIFO (RX_FIFO) 來降低CPU的中斷數量;UART1~2內嵌 16-byte 發送FIFO (TX_FIFO) 和16-byte (每個字節加3比特的錯誤數據) 接收FIFO (RX_FIFO) 來降低CPU的中斷數量,UART包括一個可編程的波特率發生器,它可以將輸入晶振除以一個除數來得到收發器需要的時鍾. 波特率公式是 Baud Rate = UART_CLK / M * [BRD + 2]. 其中M和BRD在波特率分頻寄存器UA_BAUD中定義。
         UART0與UART1 控制器用 2 種low-level 信號, /CTS (clear-to-send)和 /RTS (request-to-send)支持自動流程控制功能。
         UART 控制器提供 串行 IrDA (SIR, 串行紅外) 功能 (用戶需置位 UA_FUN_SEL[IrDA_EN] 使能 IrDA 功能),SIR 定義短程紅外異步串行傳輸模式 1 開始位, 8 數據位, 和1 停止位. 最大數據速率 為 115.2 Kbps (半雙工). IrDA SIR 包括 IrDA SIR 編碼/解碼協議。
         UART 控制器具有LIN(局域網) 功能. LIN 模式提供設定LIN_EN bit 位 UA_FUN_SEL 寄存器. 在LIN 模式, 1 開始位 8 數據位和1 停止位相一致,同標准LIN 相同。
         串口特性:可編程為5,6,7,8位的數據位,可編程奇偶校驗或無校驗,可編程為1,1.5,2位的停止位,
         UART支持RS-485 9位模式功能,設置UA_FUN_SEL選擇RS485模式;控制器可以配置成可尋址的從機模式,RS485發送可通過設置優先級(bit9)為1標志地址特性,對於數據特性,標志優先級為0;設置寄存器UA_LCR控制第9位(PBE,EPE和SPE置位,第9位發送0;PBE,SPE置位,EPE清零,第9位發送1)。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
         RS485自動地址識別模式:接收器在檢測到地址字節(bit9 =1),並且地址字節數據與UA_RS_485[ADDR_MATCH]的值相匹配之前將忽略所有數據,地址字節數據將存儲在RX_FIFO,所有接收字節數據將被接收並存儲於RX_FIFO,直到地址字節或數據字節與UA_RS_485[ADDR_MATCH]的值不匹配。
         RS485普通多點操作模式:流設置UART_FCR[RS485_RX_DIS]使能UA_RS_485[RS485_NMM],接收器會忽略數據,直到檢測到地址字節(bit 9=1)並且地址字節數據存儲到RX_FIFO;流禁止UART_FCR[RS485_RX_DIS],接收器將接收任何數據。
         RS485編程流程:1)設置寄存器UA_FUN_SEL的FUN_SEL位選擇RS485模式;
         2)設置寄存器UA_FCR中的RX_DIS位使能或禁止RS485接收器;
         3)設置RS_485_NMM模式或RS_485_AAD模式;
         4)如果選擇RS_485_AAD模式,AADR_MATCH設置成自動地址匹配值;
         5)若為自動方向模式,設置R2_485_AUD;

9.實時時鍾

         時鍾源由外部32.768KHz晶振提供,管腳為X32I 及X32O 或者外接32.768KHz 頻率的信號源。RTC支持時間格式 (秒,分,時)寄存器(TLR)以及日歷格式(日,月,年)寄存器(CLR)。數據格式由BCD格式存取。模塊支持鬧鍾功能,(TAR)寄存器用於指示時間鬧鈴,(CAR)用於指示日期鬧鈴。
         RTC 模塊支持時間記步及鬧鍾中斷,通過設定TTR.TTR[2:0],中斷提供8級選擇1/128, 1/64, 1/32, 1/16, 1/8, 1/4, 1/2 及1 秒。當 RTC 計數器內的值TLR 和CLR 與TAR和CAR相當時,會引發中斷標志 (RIIR.AIF)。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
         基於RTC時鍾與系統時鍾采用不同的模塊,用戶對RTC寄存器寫入后,必須等待2個RTC時鍾周期(60us)后,寄存器內的值才會被更新。寄存器AER 位 15~0 作為RTC允許讀/寫密碼,用於避免掉電時對RTC造成的誤寫,要訪問RTC的寄存器AER,必須寫入0xa965以打開訪問限制,讀寫使能后,將會有效512個RTC時鍾,之后自動關閉。
10.PWM發生器和捕捉定時器
1)PWM發生器
         包含4組PWM發生器,可配置為8個獨立的PWM輸出,PWM0~PWM7,或4組互補的PWM對,帶4個可編程的死區發生器。4組PWM發生器提供8個獨立的PWM中斷標志,當PWM向下計數周期達到零時觸發中斷。PWM發生器可以定義為單觸發模式或連續輸出PWM波形。
         每組PWM發生器帶有8位預分頻,一個時鍾除頻提供5級時鍾源(1, 1/2, 1/4, 1/8, 1/16),兩個PWM定時器包括2個時鍾選擇,兩個16位PWM向下計數計數器用於PWM period 周期控制,兩個16位比較器用於PWM duty 周期控制以及死區發生。
         當PCR.DZEN01置位, PWM0 與 PWM1形成互補的PWM周期,這一對PWM的周期、占空比和死區時間由PWM0定時器和死區發生器0決定;其他PWM互補對類似。
         當16位向下計數計數器達到0時,中斷請求產生。如果PWM定時器被定義為連續模式,當向下計數器達到0時,會自動重新導入設定值(CNRx)並從新開始運行下一個周期。如果定時器設為單觸發模式,向下計數器停止計數,並產生中斷請求。比較器數據用於設定脈寬,計數器控制邏輯在計數器計數到比較值時將PWM輸出變高。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
         PWM period 和duty 控制由向下計數的PWM寄存器(CNR)以及PWM比較寄存器(CMR)控制。占空比 = (CMR+1)/(CNR+1).
         PWM 頻率 = PWMxy_CLK/(prescale+1)*(clock divider)/(CNR+1); xy代表01, 23, 45 或 67, 取決於所選擇的PWM通道.
         CMR >= 計數值: PWM 輸出為高,反之PWM輸出低;PWM低脈寬= (CNR-CMR) ; PWM高脈寬=(CMR+1)
         PWM定時器具有雙緩存功能。寄存器預先設定的值,在一個周期完成后,可以自動重載。PWM計數器值寫入CNR0~7,並可從PDR0~7內讀出;PWM 控制寄存器(PCR) 的CH0MOD 位定義PWM0是自動重載模式或是單觸發模式。當PWM計數器計到0,MCU自動重載CNR0 值到PWM 計數器。雙緩存允許CMR字當前運行時改寫,下一個周期內值被導入運行。
         PWM死區發生器,用於保護器件電源(這一特性用於在開關設備的斷開和另一個開關設備的閉合之間插入一個時間缺口,使它們不會處於同時閉合的狀態)。該功能產生可編程的延遲時間到PWM上升沿輸出,用戶通過編程PPRx.DZI確定死區間隔。
2)捕捉定時器
         當PWM輸出模塊的輸入捕捉功能使能,可同時用作捕捉功能。捕捉器0和PWM0使用同一個定時器,捕捉器1和PWM1使用另一組定時器,以此類推。在使用捕捉功能之前,必須預先配置PMW定時器。當輸入信號有上升沿轉變時,PWM計數器的值將存入CRLRx寄存器,當輸入信號有下降沿轉變時,PWM計數器的值將存入CFLRx寄存器。
         設定CCR0[1] (上升沿觸發中斷有效)和CCR0[2](下降沿觸發中斷有效),可以使捕捉器通道0作為中斷源。同樣設定CCR0[17] 和CCR0[18],可以設定通道1。最大的捕捉頻率由捕捉中斷延遲決定,捕捉中斷發生時,軟件執行以下三步:a.讀PIIR獲取中斷源;b.讀CRLRx/CFLRx獲取捕捉值和寫

1清PIIR,如果中斷延遲在T0完成,捕捉信號在(T0)間隔內必須不能變化,此條件下,捕捉頻率最大為1/T0。

         每當捕捉控制器觸發捕捉中斷時,相應的PWM計數器會同時重載CNRx的值,通道低脈寬為(CNR+1-CRLR);通道高脈寬為 (CNR+1-CFLR)。
3)PWM定時器及捕捉配置
         PWM定時器開啟步驟:
         1. 配置時鍾選擇 (CSR)
         2. 配置預分頻(PPR)
         3. 配置反向打開/關閉,死區打開/關閉,自動重載/單觸發模式以及PWM定時器關閉 (PCR)
         4. 配置比較器寄存器(CMR) 設定PWM 占空比.
         5. 配置PWM計數器寄存器 (CNR) 設定PWM周期.
         6. 配置中斷使能寄存器 (PIER)
         7. 配置PWM輸出使能 (POE)
         8. 配置相應的管腳GPIO (GPA_MFP)
         9. 配置相應的管教到輸出模式 (GPIOA_OMD)
         10. 使能PWM定時器(PCR)
         
         PWM定時器關閉步驟:
         方式 1:設定16位向下計數計數器(CNR)為0,並查看PDR狀態。當PDR達到0,關閉PWM定時器 (PCR的CHxEN位). (推薦)
         方式2:設定16位向下計數計數器(CNR)為0,當中斷條件發生。在中斷內關閉PWM定時器(PCR的CHxEN位). (推薦)
         方式3:直接關閉PWM定時器(PCR的CHxEN位). (不推薦,因為禁止CHxEN會立即停止PWM輸出信號,導致PWM占空比改變,可能引起電機的損壞)
         
         捕捉開始步驟:
         1. 配置時鍾選擇(CSR)
         2. 配置預分頻(PPR)
         3. 配置通道使能,上升/下降沿中斷使能以及輸入信號反向打開/關閉 (CCR0, CCR1)
         4. 配置PWM計數器寄存器 (CNR)
         5. 配置捕捉輸入使能寄存器 (CAPENR)
         6. 配置相應的GPIO管腳用於PWM功能 (GPA_MFP)
         7. 配置相應的GPIO管腳於輸入模式S (GPIOA_OMD)
         8. 使能PWM定時器(PCR)
11.看門狗定時器WDT
         看門狗定時器包含一個18位的自動運行的計數器,可編程其定時溢出間隔。設置WTE(WDTCR[7])使能看門狗定時器和WDT計數器開始計數. 當計數器達到選擇的定時溢出間隔,看門狗定時器中斷標志WTIF被立即置位,並請求WDT中斷(如果看門狗定時器中斷使能位WTIE置位),同時,緊接着會有一個指定周期(1024*Twdt)延時,用戶必須在指定周期內設置WTR(WDTCR[0]) (看門狗定時器復位)為高,重置18位WDT計數器,防止CPU復位,WTR在WDT計數重置后自動由硬件清零。
         通過設置WTIS(WDTCR[10:8])選擇8個定時溢出間隔(2^4~2^18),如果在特殊延遲時間終止后,如果WDT計數沒有被清零,看門狗定時將置位看門狗定時器重置標志(WTRF)為高並使CPU復位. 這個復位將持續63個WDT時鍾,然后CPU重啟,並從復位向量(0x0000 0000)執行程序,WTRF將不被看門狗復位清零,用戶可用軟件拉低WTFR。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
12.模擬數字轉換(ADC)
         NUC1XX 系列包含 一個12-bit 8通道逐次逼近式 模擬 – 數字轉換器 (SAR A/D converter)。A/D 轉換器支持 三種操作模式: 單一、單周期掃描 和連續掃描模式。開始A/D 轉換可軟件設定和外部STADC/PB.8 pin開啟。
         當改變運行模式或模擬輸入通道使能時, 為了防止錯誤的操作, 軟件需清 ADST 位為 0 (ADCR register). A/D 轉換將停止 並進入idle 模式.
         A/D轉換器有3個中斷源:A/D 轉換結束時ADF(ADSR寄存器)位被置1;當A/D轉換結果同ADCMPR0/1寄存器設定值相匹配時,CMPF0/1會被置1;當ADF、CMPF0、CMPF1其中一個標志被置1,且其相應的ADIE 位(ADCR 寄存器)及CMPIE(ADCMPR0/1寄存器)置1時,將產生 ADINT 中斷請求。
1)特征
         模擬輸入電壓: 0~Vref (Max to 5.0V).
         12位分辨率和10位精確度保證。
         多達 8 路單端模擬輸入通道或4路差分輸入。
         最大 ADC 時鍾頻率 16MHz/20MHz。ADC時鍾頻率= (ADC clock source frequency) / (ADC_N+1);
         高達600K/1M SPS 轉換速率, 轉換時間少於 1us.
         轉換結果可和指定的值相比較 當轉換值和設定值相匹配時,用戶設定產生中斷請求.
         通道7支持3輸入源:外部模擬電壓, 內部基准電壓和內部溫度傳感器輸出.
         支持自身校正功能減少轉換的誤差,用戶可寫1到CALEN 位(ADCALR 寄存器)使能自身校正功能, 當內部校正完成CAL_DONE為高。
2)單觸發模式
         在單觸發模式下, A/D 轉換僅僅在指定的單一通道中執行一次,運作流程如下:
         1. 當 ADCR 的ADST 置位開始A/D 轉換,可通過軟件或外部觸發輸入.
         2. 當 A/D 轉換完成,轉換值將存儲在與通道相對應的A/D數據寄存器中.
         3. A/D 轉換完成, ADSR 的ADF 位置位. 若此時ADIE 位置位, 將產生ADINT 中斷請求.
         4. A/D 轉換期間,ADST 位維持為1,A/D 轉換結束,ADST 位自動清 0,A/D 轉換器進入idle 模式。ADST清0后,至少要等一個ADC時鍾,才能再將ADST位置1,否則A/D 轉換器可能無法運作。
3)單周期掃描模式
         在單周期模式下,ADC會對所有指定的通道進行一次采樣和轉換,且從編號最小的通道開始運作,具體流程如下:
         1. 軟件置位 ADCR 寄存器的ADST 位或外部觸發輸入置位,  A/D 轉換從最小編號的通道開始。
         2. 每路 A/D 轉換完成后, A/D 轉換數值將裝載到相應數據寄存器中。
         3. 當被選擇的通道數都轉換完成后,ADF 位(ADSR 寄存器)置位。若此時 ADIE 置位, 將產生 ADINT 中斷請求。
         4. A/D 轉換結束, ADST位自動清0,A/D 轉換器進入idle 模式。若在轉換過程中ADST被清0,則無法保證存儲在數據寄存器中的值之正確性。ADST清0后,至少要等一個ADC時鍾,才能再將ADST位置1,否則A/D 轉換器可能無法運作。
4)連續轉換模式
         在連續模式下, 可通過設定CHEN 位 ADCHER 寄存器 (maximum 8 channels for ADC) 使能 A/D 轉換.運作流程如下:
         1. 軟件置位 ADCR 寄存器的 ADST 位或外部觸發輸入置位, A/D 轉換從最小編號的通道開始。
         2. 每路 A/D 轉換完成后, A/D 轉換數值將裝載到相應數據寄存器中.
         3. 當所有被使能的通道數依序完成一次A/D轉換后,ADF位(ADSR 寄存器)置位。若此時 ADIE 置位,將產生ADINT中斷請求,當 A/D 轉換完成后. 使能的最小編號通道將開始新的轉換。
         4. 只要ADST保持 1,就重復步驟2 ~ 3。當 ADST 位清 0, A/D 轉換將停止,但無法保證最小通道使能通道的轉換結果之正確性。
5)比較模式下的A/D轉換結果監控
         ADC控制器提供2組比較寄存器 ADCMPR0和ADCMPR1監控 A/D 轉換模塊的2路轉換結果值。可通過軟件設定CMPCH[2:0] 來選擇監控那路通道,而CMPCOND 位被用來檢查轉換值小於或大於等於CMPD[11:0]指定值,當CMPCH指定的通道轉換完成時,比較行為將會被自動的觸發一次,當比較結果與設定值匹配,比較計數器將加1,否則比較計數器清0。當計數器的值與(CMPMATCNT+1)匹配,CMPF位將置1,將產生ADINT中斷請求。在掃描模式下軟件可應用於監控外部模擬輸入pin腳電壓變化。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
6)外設DMA 請求
         當 A/D 轉換完成,結果裝載到ADDR 寄存器且VALID 置位。如果ACDR寄存器PTEN位置位, ADC控制器將產生PDMA請求(P_nDRQ) ,以便用戶將數據傳輸到用戶指定的內存空間,而無需CPU參與。不管選擇哪個通道,PDMA操作的源地址都是ADPDMA。如果ADC工作在單周期或連續掃描模式,當PDMA傳輸轉換結果時,ADC將繼續轉換選擇的下一通道,用戶可通過讀ADPDMA監控當前PDMA傳輸數據。
13.模擬比較器CMP
         NUC1XX 系列包括2 路模擬比較器,當正級輸入大於負極輸入(可選擇內部參考電壓)時,比較器輸出為邏輯1,反之為邏輯 0;每一路比較器可配置成:當輸入值發生改變時產生中斷。軟件可 寫 0 到 CMP0 位 CMPF1 以停止中斷請求。2路模擬比較器共用同一個中斷請求。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
14.USB設備控制器
         NUC1xx系列包含一組全速USB 2.0 設備控制器和收發器,符合USB 2.0規范,支持control/bulk/interrupt/isochronous 傳輸類型。
         在該設備控制器里,包含2個主接口:APB總線和由USB PHY收發器出來的USB總線,CPU通過APB總線編程控制寄存器,在該控制器內置有512字節的SRAM作為數據緩存。輸入或輸出傳輸,需要通過AHB從接口或SIE向SRAM寫數據或從SRAM讀數據。用戶需要通過BUFSEGx為每個端點緩存設置有效的SRAM地址。在USB功能有效前,用戶需要在緩沖段寄存器配置每個端點的有效起始地址(地址范圍0x4006 0100-0x4006 02ff)。
         USB設備控制器具有6個可配置的端點,每個端點可配置為IN或OUT類型。所有的操作包括control,bulk,interrupt,isochronous傳輸都由斷點模塊來執行。端點控制模塊還可以用來管理數據同步時序,端點狀態控制,當前起始地址,當前事務狀態和每個端點的數據緩存狀態。
         該控制器提供1個中斷向量、4個不同的中斷事件,包括喚醒功能、設備插拔事件、USB事件(如IN ACK,OUT ACK等)和BUS事件(如suspend和resume等),用戶需要在中斷事件狀態寄存器(USB_INISTS)檢查相關事件標志以得知發生何種中斷,然后檢測相關USB端點狀態寄存器(USB_EPSTS)以得知該端點上發生何種事件。總線中斷告之用戶一些總線事件,如USB復位、中止、暫停、恢復,用戶可以讀特殊功能寄存器“ATTR”獲取總線事件。
         USB設備有一個軟件禁用功能,用於模擬設備沒有跟主機相連的情況。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 

         SIE是設備控制器的前端,處理最多的USB 協議包。處理功能包括:

         - 包識別,處理時序
         - SOP, EOP, RESET, RESUME信號檢測/產生
         - Clock/Data分離
         - NRZI 數據編解碼與比特填塞(bit-stuffing)
         - CRC產生和校驗 (for Token and Data)
         - Packet ID (PID) 產生和校驗/解碼
         - 串-並/並-串轉換
         數字鎖相環DPLL:USB數據的比特率為12MHz, DPLL采用的48MHz的頻率由時鍾控制器產生,鎖定RXDP與RXDM的輸入數據,12MHz的比特率時鍾也是由DPLL轉換來的。
         插拔去抖動:USB設備可以進行熱插拔操作,為了監測USB設備被拔出的狀態,設備控制器提供了硬件去抖動以防止在USB插拔時產生的抖動問題,懸空檢測中斷產生於USB進行插拔操作的10ms后,用戶可以通過讀取“FLODET”寄存器的值,來應答USB插拔;“FLODET”代表在當前總線上沒有經過去抖動處理的狀態,若用戶要通過這個標志來檢測USB的狀態,則需要添加軟件去抖動功能。
         當芯片進入掉電模式時,USB 自動關閉PHY省電,此外,在特殊環境下,用戶可以給特殊功能寄存器ATTR[4]寫入“0”關閉PHY進入省電狀態。
         與USB外設通信處理:用戶可以采用中斷或檢測USB_EVF來監測USB通信,在USB通信發生時,USB_EVF 由硬件置1,並向CPU發送中斷請求。
         USB主機向設備控制器請示數據時,用戶需要准備相關的數據給端點緩存. 在緩沖請求數據后,用戶需要寫入實際數據長度給MAXPLD寄存器。一旦這個寄存器被寫入數據,內部信號“In_Rdy”會被設置,當收到主機相關的IN token之后,緩沖數據將被立刻傳送。在傳送制定數據之后,信號 “In_Rdy”會由硬件自動清除。
         USB主機要發送數據到設備控制器的OUT端點,硬件將這些數據存在指定的端點緩存里,通信完成后,硬件在MAXPLD記錄數據長度,並發送“Out_Rdy”信號,這避免硬件在用戶沒有取走當前數據時接收下一個數據。一旦用戶處理了這個通信時,由軟件寫入相關的寄存器“MAXPLD”來設置“Out_Rdy” 信號以接收下一次通信。
15.I2C 總線控制器 (主機/從機)
         I2C 為雙線,雙向串行總線,I2C 總線上數據的傳輸速率在標准模式下可達100kbit/s 在快速模式下可達400kbit/s 在高速模式,直至 1.0 Mbit/s 的增強高速模式。
         在連接到總線的器件間傳遞信息每個器件都有一個唯一的地址識別。數據在主機和從機間通過SCL時鍾線控制在SDA數據線上實現一字節一字節的同步傳輸,數據由最高位MSB開始傳輸,每個字節包含8位,每次傳輸可以發送的字節數量不受限制,每個字節后必須跟一個響應位。如果從機要完成一些其他功能后,才能接收或發送下一個完整的數據。字節可以使時鍾線SCL 保持低電平迫使主機進入等待狀態,當從機准備好接收下一個數據字節並釋放時鍾線SCL 后,數據傳輸繼續。
         片上I2C邏輯提供符合I2C總線標准的串聯標准接口,I2C接口自動處理字節傳輸,將I2CON的ENS1位設置為1,即可使能該端口,I2C H/W接口通過SDA與SCL兩個引腳連到I2C總線。用於I2C操作的兩個引腳需要上拉電阻,因為這兩個引腳為開漏腳,在I/O引腳作為I2C端口使用時,用戶必須預先設置引腳功能為I2C功能。
1)I2C協議
         通常標准I2C傳輸協議包含四個部分:
         - 起始信號或重復起始信號
         - 從機地址傳輸
         - 數據傳輸
         - 停止信號
2)I2C寄存器
         NUC1xx共有6個特殊功能寄存,用於I2C通訊: I2CON(控制寄存器 C0H), I2STATUS(狀態寄存器 BDH), I2DAT(數據寄存器 BCH), I2ADDR(包括I2CADDRn和I2CADRMn,地址寄存器 C1H), I2CLK(時鍾速率寄存器 BEH) 和 I2TOC(定時計數寄存器 BFH)。寄存器的第31位至第8位都是保留的,不具備任何功能。
         當ENS1置1,I2C口使能后,內部狀態由 I2CON 和 I2C總線上狀態控制。當有新的狀態發生后,會存儲到 I2STATUS, I2C 中斷標志(SI) 也會自動置起。若此時 EI2 被設定為高,I2C中斷會被響應。
3)I2C操作模式
         5種操作模式:主機/傳輸,主機/接收,從機/傳輸,從機/接收和GC 模式。
16.串行外圍設備接口(SPI)控制器
         SPI接口是工作於全雙工模式下的同步串行數據傳輸接口。共支持四組雙向主/從機模式傳輸。包括4組SPI控制器,將從外設得到的數據進行串並轉換,或將數據進行並串轉換,發送到外設。每組SPI控制可以被作為一個主機,驅動最多2個外部從設備,還可以被設置為外圍設備的從機。
         該主/從機內核包含2組32位輸出/輸入數據緩存,可支持突發傳輸(burst mode)模式,並支持各種不同長度的變量數據模式,最多可支持64位數據傳輸。
         該控制器支持不同串行時鍾,支持1位、2位數據傳輸模式。支持MSB 或 LSB 為最先傳輸模式。支持2個通道的PDMA請求,一個用於發送,一個用於接收。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划

1)SPI作為主機時,與 一個從機設備通信如下:
         a.對DIVIDER內寫入值,確定傳輸頻率。
         b. 將主機模式的相應設置寫入SSR,設定 ASS = 0, SS_LVL = 0 且SSR[0] 或SSR[1] =1 用以使能模塊。
         c. 將主機模式的相應設置寫入寄存器SPI_CNTRL。
         d. 如果SPI主機要發送一個字節的數據到外設,則將所要發送的數據寫入寄存器SPI_Tx0。
         e. 如果SPI主機只是從外設接收一個字節的數據,不必管被傳輸出去的數據是什么,只需向寄存器SPI_TX0寫入0xff。
         f. 使能GO_BUSY位(SPI_CNTRL[0]=1),以開始SPI接口的數據傳輸。
         g. 等到SPI中斷發生,或檢測GO_BUSY位直到被硬件自動清0。
         h.從寄存器SPI_RX0[7:0]讀出所接收到的一個字節的數據。
         i.重復步驟d,繼續其他數據的傳輸,或設置SSR[0]為0以停止外設。
2)SPI作為從機時
         a.設置從機有效電平位SS_LVL(SPI_SSR[2]=1)與從機選擇電平觸發位SS_LTRIG(SPI_SSR[4]=1)使從機選擇信號為高電平觸發。
         b.將從機模式的相應設置寫入寄存器SPI_CNTRL。
         c.如果SPI從機要發送一個字節的數據到SPI主機,則將所要發送的數據寫入寄存器SPI_Tx0。
         d.如果SPI從機只是要從外設主機接收一個字節的數據,不必管被傳輸的數據是什么,只需向寄存器SPI_TX0寫入0xff。
         e. 使能GO_BUSY位(SPI_CNTRL[0]=1),等到外設的從機選擇觸發輸入和串行時鍾輸入,以開始SPI接口的數據傳輸。
         f. 等到SPI中斷發生,或檢測GO_BUSY位直到被硬件自動清0。
         g.從寄存器SPI_RX0[7:0]讀出所接收到的一個字節的數據。
         h.重復步驟c,繼續其他數據的傳輸,或設置SSR[0]為0以停止外設。
17.I2S 控制器
         I2S控制器由IIS協議與外部音頻CODEC組成,兩個8字的FIFO分別用於讀與寫通道,可以處理8~32位字大小。DMA控制器處理數據在FIFO與內存之間傳輸,兩個DMA請求,一個用於發送,一個用於接收。
         I2S 可工作於8位主機或從機,支持單聲道和立體聲的音頻數據.支持I2S和MSB 校驗數據格式.當緩沖超過可編程邊界時,產生中斷請求.
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
18.PS2設備控制器(PS2D)
         PS/2 設備控制器為 PS/2通訊提供基本時序控制。在設備和主機之間的通訊CLK 和 DATA pins控制. 不同於 PS/2 鍵盤和鼠標設備控制器, 接收/傳輸代碼需要固件進行代碼轉換成有意義的代碼。主機發送到設備的數據是在上升沿讀取,設備發送到主機的數據在上升沿之后被改變。可編程1~16 位傳輸緩沖 以減少CPU 干擾。支持雙數據緩沖功能。
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
 
         PS/2 設備具有 雙向雙向同步串行協議,當總線為 "Idle" 模式並且兩條線都為高 (open-collector),該狀態為設備允許開始 DATA 傳輸的唯一條件。主機在總線上有最終的控制權 ,比呢且任何時候都可以通過下拉CLK line禁止通訊。設備始終產生CLK信號,如果主機需要發送 DATA, 下拉CLK line 為低,禁止從設備進行通訊。主機隨后將DATA拉低並且釋放CLK,這是"Request-to-Send" 狀態,通知設備開始發送CLK脈沖。所有數據每次傳輸1字節,每字節包括11-12位:1 開始位(一直為 0);8 數據位(先最低位);1 奇偶位(odd parity);1 停止位(一直為1);1 應答位(主機~設備通訊)。
         設備向主機傳輸,設備應用於連續的 11-位 架構:1 個開始位(始終為 0);8 數據位(最高位最先傳輸);1奇偶位(odd parity);1停止位(一直為1)。
         主機向設備傳輸:首先,PS/2 設備一直產生 CLK 信號,如果主機希望發送DATA, 首先需設定CLK 和 DATA在 "Request-to-send" 狀態:拉低CLK 至少100 us 禁止通訊;應用 "Request-to-send" 拉 DATA 為低, 釋放CLK。設備在不超過10 ms時間內需不間斷的監控狀態,當設備監控到此狀態,將開始產生CLK 信號和8位DATA位 1 位停止位。當CLK line為低時,主機改變DATA line,當CLK為高時設備讀數據。停止位接收后,設備發出應答信號,使DATA line 為低 並且產生CLK 脈沖。
         寫PS2TXDATA0 寄存器將觸發設備和主機通訊,在向TX FIFO傳輸數據前,S/w 需定義TXFIFO 長度。寫PS2TXDATA0 寄存器后100us,第一個字節的start bit 才會被傳送到總線上。
19.局域控制網絡總線(CAN Bus)
         區域控制器 (CAN) 為串行通訊協議 具有多主機(multi-master) 和高效率實時控制功能,安全性能高 成本低,應用於高速網絡,在汽車電子, 車身控制, 傳感器, 防滑系統等。CAN 連接速度可達 1Mbit/s。CAN 2.0B 協議兼容。
         總線上信息發送為固定模式.當總線空閑時, 任何的連接單元可進行數據傳遞.
ARM手記之芯唐M0系列 - 蓬蒿人 - 一天一計划
         信息傳遞受 4 種不同結構類型控制:
         1. A DATA FRAME 數據從傳輸到接收的運輸.
         2. A REMOTE DATA FRAME 通過總線單元向傳輸DATA FRAME IDENTIFIER發送請求.
         3. An ERROR FRAME 傳輸通過 任何單元偵測總線 error.
         4. An OVERLOAD FRAME 應用於提供額外延時 在當前和隨后 DATA 或 REMOTE FRAMES 之間.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM