📄 main.c
字号:
#include <apb_configuration.h>#include "vic_pl190.h"#include "uart.h"#include "gpio.h"#include "gp_timers.h"#include "adc.h"#include "wdog.h"#include "i2c.h"#include "sdram.h"#include "udc_ahb.h"#include "usb20.h"#include "mac.h"#include "smi.h"#include "rtc.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 */ /*****************************************************************************/void C_Entry(void){ intctlInit(); UART1_Init(); UART2_Init(); UART3_Init(); adc_init(); wdogInit(); i2cInit(); mac_init(); smi_init(); rtc_init(); // main block while(1) { /*test selection*/ static char in_buf; UART_tx_vec("SPEARHead on board tests",strlen("SPEARHead on board tests")); UART_tx_vec("Code in SRAM. Cache, itcm activated. Dtcm at 0x000FF000.",strlen("Code in SRAM. Cache, itcm activated. Dtcm at 0x000FF000.")); UART_tx_vec("select a test:",strlen("select a test:")); UART_tx_vec("O -> for MEMORY tests; 5 -> for WATCHDOG test; ",strlen("O -> for MEMORY tests; 5 -> for WATCHDOG test; ")); UART_tx_vec("1 -> for UART tests; 6 -> for I2C test; ",strlen("O -> for MEMORY tests; 5 -> for WATCHDOG test; ")); UART_tx_vec("2 -> for GPIO tests; 7 -> for MAC test; ",strlen("O -> for MEMORY tests; 5 -> for WATCHDOG test; ")); UART_tx_vec("3 -> for GPT tests; 8 -> for USBDEVICE test;",strlen("O -> for MEMORY tests; 5 -> for WATCHDOG test; ")); UART_tx_vec("4 -> for ADC tests; 9 -> for USBHOST test; ",strlen("O -> for MEMORY tests; 5 -> for WATCHDOG test; ")); UART_tx_vec("a -> for FLASH tests; b -> for RTC test; ",strlen("O -> for MEMORY tests; 5 -> for WATCHDOG test; ")); while (!(UART_putc(13))); while (!(UART_putc(10))); while (!(UART_getc(&in_buf))); switch(in_buf) { case '0': UART_tx_vec("MEMORY test selected",strlen("MEMORY test selected")); test_sdram(); //test_burst(); //test_dtcm(); break; case '1': UART_tx_vec("UART test selected",strlen("UART test selected")); uart_test(); UART_test_23(); break; case '2': UART_tx_vec("GPIO test selected",strlen("GPIO test selected")); gpio_test(); break; case '3': UART_tx_vec("GPT test selected",strlen("GPT test selected")); gpt_test(); break; case '4': UART_tx_vec("ADC test selected",strlen("ADC test selected")); adc_test(); break; case '5': UART_tx_vec("WATCHDOG test selected",strlen("WATCHDOG test selected")); wdogTest(); break; case '6': UART_tx_vec("I2C test selected",strlen("I2C test selected")); i2cTest(); break; case '7': UART_tx_vec("MAC test selected",strlen("MAC test selected")); mac_test(); break; case '8': UART_tx_vec("USBDEVICE test selected",strlen("USBDEVICE test selected")); USBDev_enum_test(); break; case '9': UART_tx_vec("USBHOST test selected",strlen("USBHOST test selected")); break; case 'a': UART_tx_vec("Serial Flash test selected",strlen("Serial Flash test selected")); smi_test(); break; case 'b': UART_tx_vec("Real Time Clock test selected",strlen("Real Time Clock test selected")); rtc_test(); break; } UART_tx_vec("END of SPEARHead test (press a key to restart)", strlen("END of SPEARHead test (press a key to restart)")); while (!(UART_putc(13))); while (!(UART_putc(10))); while (!(UART_getc(&in_buf))); if(in_buf == '=') { while(!(UART_getc(&in_buf)))UART_tx_vec("Developed by: ST CSD",strlen("Developed by: ST CSD")); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -