📄 main.c
字号:
#include <apb_configuration.h>#include "gp_timers.h"#include "uhc_ahb.h"#include "uart.h"/*****************************************************************************//* PLL CODE */ /*****************************************************************************/void set_pll_p_value(unsigned int new_p_value){ unsigned int New_P_VALUE; unsigned int __PLL_CONTROL_REGISTER; /* The maximum supported p value for PLL is 5 */ if (new_p_value <= 5) { __PLL_CONTROL_REGISTER = APBControl->RESET_CLOCK_CONTROL_REGISTER; __PLL_CONTROL_REGISTER = __PLL_CONTROL_REGISTER & 0xF8FFFFFFU; New_P_VALUE = new_p_value << 24; New_P_VALUE = New_P_VALUE & 0x07000000U; __PLL_CONTROL_REGISTER = __PLL_CONTROL_REGISTER | New_P_VALUE; APBControl->RESET_CLOCK_CONTROL_REGISTER = __PLL_CONTROL_REGISTER; }}void set_pll_m_value(unsigned int New_M_Value){ unsigned __Reset_Clock_Register; New_M_Value = New_M_Value & 0x000000FFU; if ((New_M_Value >= 1) && (New_M_Value <= 255)) { __Reset_Clock_Register = APBControl->RESET_CLOCK_CONTROL_REGISTER; __Reset_Clock_Register = __Reset_Clock_Register & 0xFFFF00FFU; __Reset_Clock_Register = __Reset_Clock_Register | (New_M_Value << 8); APBControl->RESET_CLOCK_CONTROL_REGISTER = __Reset_Clock_Register; }}void set_pll_n_value(unsigned int New_N_Value){ unsigned __Reset_Clock_Register; New_N_Value = New_N_Value & 0x000000FFU; if ((New_N_Value >= 3) && (New_N_Value <= 255)) { __Reset_Clock_Register = APBControl->RESET_CLOCK_CONTROL_REGISTER; __Reset_Clock_Register = __Reset_Clock_Register & 0xFF00FFFFU; __Reset_Clock_Register = __Reset_Clock_Register | (New_N_Value << 16); APBControl->RESET_CLOCK_CONTROL_REGISTER = __Reset_Clock_Register; }}void change_pll_frequency(void){ unsigned int __PLL_CONTROL_REGISTER; unsigned int __PLL_STATUS; /* Ok. Give the command to PLL Wrapper */ __PLL_CONTROL_REGISTER = APBControl->RESET_CLOCK_CONTROL_REGISTER; __PLL_CONTROL_REGISTER = __PLL_CONTROL_REGISTER | 0x80000000U; APBControl->RESET_CLOCK_CONTROL_REGISTER = __PLL_CONTROL_REGISTER; /* Wait for PLL Control Logic Feedback */ __PLL_STATUS = APBControl->Pll_Status_Reg; __PLL_STATUS = __PLL_STATUS & 0x00000080U; while (!__PLL_STATUS) { __PLL_STATUS = APBControl->Pll_Status_Reg; __PLL_STATUS = __PLL_STATUS & 0x00000080U; } /* Final Step. Release Control Resources */ __PLL_CONTROL_REGISTER = APBControl->RESET_CLOCK_CONTROL_REGISTER; __PLL_CONTROL_REGISTER = __PLL_CONTROL_REGISTER & 0x7FFFFFFFU; APBControl->RESET_CLOCK_CONTROL_REGISTER = __PLL_CONTROL_REGISTER;}/* The PLL Frequency is : -- -- FOut = 2 x N x Fin -- ---------------- -- M x (2^P) - Default Values --------------------- - M = 1 - N = 20 => division by 20 - P = 1 - General Rules ---------------------- - > M and N cannot be at '0' - > Maximum value for p is 5*/void SYS_init(){ APBControl->CLK_DISABLE_REGISTER |= ENABLE_CLK_PI; APBControl->CLK_DISABLE_REGISTER |= ENABLE_HCLK_PI; /* set PLL (AHB/APB clock 96MHz -- ARM clock 192 MHz) */ //set_pll_p_value(1); //set_pll_m_value(1); //set_pll_n_value(192); //change_pll_frequency();}/*****************************************************************************//* END PLL CODE */ /*****************************************************************************//*****************************************************************************//* HOST CODE */ /*****************************************************************************/voidC_Entry(void){ intctlInit(); UART1_Init(); gptInit(); malloc_init(); init_usbh(); init_usb(); runQueueHead(); // main block while(1) { event_usb(); } }/*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -