淺談 LPC546xx clock, gpio, timer 使用方式

淺談 LPC546xx clock, gpio, timer 使用方式

 

  • LPC5460x簡介
  1. LPC5460x

          The LPC546xx MCU family combines the power efficiency of the 220 MHz Arm® Cortex®-M4 core with multiple high-speed connectivity options

           

           圖 1.1 LPC5460x PCBA

 

  1. 包含功能
  • I2C, SPI, UART, I2S 共十組
  • Full speed USB device 一組, High speed USB device 一組
  • 12 bit ADC, 12 組輸入
  • DMIC. I2S, Ethernet, CAN
  • Timer

       LPC54605 EVB 電氣規格

參數

LPC54605 工作電壓

USB 均插入 5V USB 孔

輸入電壓

1.8~3.3V (DC)




二﹑ LPC5460x Clock 說明

  • Clock 來源

           內部可直接選擇 12 MHz, 48MHz, 96MHz, WDT, 內部的 FRO 的準確度為 1%, 可以外掛 32.768K Clock in ( 若有 USB 需求, 則需要外掛精度夠的 Xtal )

  • 提供 PLL 功能, 主要 Clock 流程如下圖1
  • 圖 2.1
  • 呼叫 Init_CPU_Clock () ; 啟動 Clock, 並在帶入想要 Core 執行頻率的值, 及 clock 來源,

           若是要跑 12MHz 並使用外部振盪器, 則輸入 Init_CPU_Clock (12000000, external_OSC ) ;

           若是要跑 48MHz並使用外部振盪器,則輸入 Init_CPU_Clock (48000000, external_OSC ) ;

           若是要跑 96MHz並使用外部振盪器,則輸入 Init_CPU_Clock (96000000, external_OSC ) ;

           要測試 Clock 跑多少, 則可以呼叫 Drv_Clock_out (CLOCKOUT_SOURCE); 輸出 Clock, 由 CLOCKOUT_SOURCE 代入參數指定要輸出哪個時鐘來源

 

三﹑ LPC5460x GPIO 說明

  • GPIO 可以設定成輸入上拉下拉, 輸出高電位低電位
  • 內部等效電路如下圖1

          圖 3.1

  • 呼叫 Init_GPIO (); 啟動 GPIO 相關電源 Clock 等, 讓 GPIO 的功能可以使用,
  • 呼叫 DRV_GPIO_Out (PORT_Number, PIO_Number, HiLo); 控制腳位輸出高低電位

           舉例: PIO1_15 要輸出高電壓,

           PORT_Number = 1,

           PIO_Number = 15,

           HiLo = 1,

           DRV_GPIO_Out (1, 15, 1);

  • 呼叫 DRV_GPIO_Toggle (PORT_Number, PIO_Number) 可以切換目前腳位電位
  • 呼叫 Init_GPIO_Interrupt (Channel_0_to_7, PORT_Number, PIO_Number, Interrupt_mode) 可以設定腳位中斷

          舉例: 要 PIO07 做 PINT0 的負緣中斷,

          Channel_0_to_7 = 0, 指定要 PINT0 中斷,

          PORT_Number = 0,

          PIO_Number = 7,

          Interrupt_mode  = EDGE_FALLING,

          Init_GPIO_Interrupt(0, 0, 7, EDGE_FALLING ) ;

  

四﹑ LPC541x Timer 說明

  • 這裡說明 NXP 常使用的 MRT, CTimer 與 SCT 三種 Timer,
  1. 其中 MRT 是很方便的 Timer, 依 system clock 來做計數頻率, 當計數到該 Channel 設定值時, 會觸發中斷
  2. SCT 是較多功能的 Timer, 依 system clock 來做計數頻率, 可以設定數到設定值觸發事件, 或是外部腳位電位達到設定值觸發事件, 其事件可以使用狀態來區分, 在不同狀態下可以觸發哪幾種事件,單純的事件也可以設定成腳位輸出, 所以可以設定成 SCT 輸出 PWM, 而以上 SCT 的處理流程完全不用程式碼執行, 只需一開始設定完成後, 即自動對應事件與狀態執行
  3. CTimer 是 NXP 傳統的 timer, 有硬體對應輸出, 可以進入中斷做修改, 十分方便使用,

 

  • MRT 的系統方塊圖如下圖1,

         圖 4.1

  • SCT 的系統方塊圖如下圖 4.2,

          圖 4.2

  • Ctimer 的系統方塊圖如下圖 4.3

         圖 4.3

  • 呼叫 Init_MRT (); 啟動 MRT 的電源及 Clock 並初始化暫存器設定
  • 呼叫 Drv_MRT_Ch0to3_Timer_Interrupt (Sel_Channel0to3, Timer_period, Int_Mode, Ena_Dis); 設定計時器中斷發生的頻率與次數,

          舉例: 要觸發每 0.1 秒的中斷並持續觸發

          Sel_Channel0to3 = 0, 使用 MRT 裡的 Channel0,

          Timer_period = 9600000, 假設 system clock 是跑 96MHz,

         所以計數設定為 9.6M 以達每 0.1 秒數滿 9.6M 觸發中斷,

         Int_Mode = 0, 不斷觸發

         Ena_Dis = 1, 啟動

         Drv_MRT_Ch0to3_Timer_Interrupt (0, 9600000, 0, 1);



  • 呼叫 Init_SCT_PWM (SCT_HZ); 啟動 SCT 並初始化 PWM 的頻率
  • 呼叫 Drv_SCT_PWM_OUTPUT_and_DUTY (SCT_OUTPUTn, SCT_DUTY); 開始輸出 PWM 並設定腳位及 PWM 的 Duty,

          舉例: 要打出 1000Hz 並且有 60% 的 Duty 的 PWM,

          SCT_HZ = 1000, 1000Hz

          SCT_OUTPUTn = 0, SCT0 腳位輸出

          SCT_DUTY = 60, 60% Duty

          Init_SCT_PWM (1000);

          Drv_SCT_PWM_OUTPUT_and_DUTY (0, 60);

  • 呼叫 Init_CT32B0(PR , Time); 啟動 Ctimer 並初始化 CTimer 的觸發週期,

          舉例: 假設 system clock 是跑 96MHz, 要每 0.01 秒觸發一次中斷,

          PR = 0, CPU 每 tick 一次, Ctimer 計數一次

         Time = 960000, 當計數達 960000 觸發中斷, 並重新計數,

         Init_CT32B0(0, 960000);

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論