⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Spearhead2000的bootloader
💻 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 + -