在线时间8 小时
UID4073769
注册时间2024-12-26
NXP金币177
TA的每日心情 | 怒 2025-1-6 08:25 |
---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
注册会员

- 积分
- 112
- 最后登录
- 2025-2-19
|
在使用官方SDK的gpio_demo,我的板子是使用外部晶振16MHZ,时钟FEE模式,跳转到中断default_isr,卡在该条指令pUART->C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK );求助
void sysinit (void)
{
SIM_ConfigType sSIMConfig = {{0},0};
ICS_ConfigType sICSConfig = {0};
/* 初始化通过/失败计数为 0 */
global_pass_count = 0;
global_fail_count = 0;
#if defined(TRIM_IRC)
/*如果没修剪,先修剪时钟,
主要是针对内部时钟的,可以实现内部时钟在31.25Khz 到 39.0625khz之间的trim,
出厂值是31.26khz,这些都可以在datasheet中查到。
如果你用外部时钟,当然可以不调用trim,就默认出厂值就行了。 */
ICS_Trim(ICS_TRIM_VALUE);
#endif
/*
* 使能 SWD pin, RESET pin
*/
/*
* 注意:请确保其他寄存器位也写入一次,如果需要,需要在这里添加其他位掩码。
*/
#if defined(SPI0_PINREMAP)
sSIMConfig.u32PinSel |= SIM_PINSEL_SPI0PS_MASK;
#endif
#if defined(OUTPUT_BUSCLK)
sSIMConfig.sBits.bEnableCLKOUT = 1; /* 如果启用,输出总线时钟 */
#endif
#if defined(DISABLE_NMI)//in
sSIMConfig.sBits.bDisableNMI = 1;
#endif
sSIMConfig.u32SCGC |= SIM_SCGC_SWD_MASK | SIM_SCGC_FLASH_MASK |
SIM_SCGC_UART1_MASK
;
/* 总线时钟除以2 */
sSIMConfig.u32CLKDIV |= SIM_CLKDIV_OUTDIV2_MASK;
SIM_Init(&sSIMConfig); /* 初始化 SIM */
#if defined(XOSC_STOP_ENABLE)
sICSConfig.oscConfig.bStopEnable = 1; /* enabled in stop mode */
#endif
#if defined(CRYST_HIGH_GAIN)
sICSConfig.oscConfig.bGain = 1; /* high gain */
#endif
#if (EXT_CLK_FREQ_KHZ >=4000)
sICSConfig.oscConfig.bRange = 1; /* high range */
#endif
sICSConfig.oscConfig.bEnable = 1; /* 启用 OSC */
sICSConfig.u32ClkFreq = EXT_CLK_FREQ_KHZ; //16MHZ
#if defined(USE_FEE) //使用FEE模式
sICSConfig.u8ClkMode = ICS_CLK_MODE_FEE;
#elif defined(USE_FBE_OSC)
sICSConfig.u8ClkMode = ICS_CLK_MODE_FBE_OSC;
#elif defined(USE_FEE_OSC)
sICSConfig.u8ClkMode = ICS_CLK_MODE_FEE_OSC;
#endif
/* 初始化ICS */
ICS_Init(&sICSConfig);
/* 初始化UART打印 */
UART_InitPrint();
#if defined(PRINT_SYS_LOG)
//print_sys_log();
#endif
}
void ICS_Init(ICS_ConfigType *pConfig)
{
if(pConfig->u8ClkMode == ICS_CLK_MODE_FEE)
{
pConfig->oscConfig.bIsCryst = 1; /* 晶振输入 */
pConfig->oscConfig.bWaitInit = 1; /* 等待初始化完成 */
FEI_to_FEE(pConfig); /* 切换到 FEE 模式 with 外部晶振 */
}
else if (pConfig->u8ClkMode == ICS_CLK_MODE_FEE_OSC)
{
pConfig->oscConfig.bIsCryst = 0; /* is clock */
FEI_to_FEE_OSC(pConfig); /* switch to FEE mode with active oscillator input */
}
else if (pConfig->u8ClkMode == ICS_CLK_MODE_FBE_OSC)
{
pConfig->oscConfig.bIsCryst = 0; /* is clock */
FEI_to_FBE_OSC(pConfig); /* switch to FBE mode with active oscillator input */
}
else
{
/* FEI mode by default */
ICS->C2 = (ICS->C2 & ~(ICS_C2_BDIV_MASK)) | ICS_C2_BDIV(0);
/*
将BDIV设置为0意味着系统时钟没有被分频,直接使用FLL(Frequency-Locked Loop)输出的时钟频率。
如果需要分频,可以将BDIV设置为1、2、3或4,这将分别对应2、4、6或8的分频比
*/
}
}
int main (void)
{
/*中断向量表偏移量设置*/
//SCB->VTOR = FLASH_BASE | 0x8003400;
// RTC_ConfigType sRTCConfig;
// RTC_ConfigType *pRTCConfig = &sRTCConfig;
/*配置RTC为1Hz中断频率 */
// pRTCConfig->u16ModuloValue = 9u;
// pRTCConfig->bInterruptEn = RTC_INTERRUPT_ENABLE; /* enable interrupt */
// pRTCConfig->bClockSource = RTC_CLKSRC_1KHZ; /*RTC_CLKSRC_IREF clock source is 1khz*/
// pRTCConfig->bClockPresaler = RTC_CLK_PRESCALER_100; /*prescaler is 100*/
//
// RTC_SetCallback(RTC_Task);
// RTC_Init(pRTCConfig);
/* way 1. GPIO initialize by multiple pin mask */
// GPIO_Init(GPIOA, GPIO_PTB5_MASK, GPIO_PinOutput);
/* way 2. GPIO initialize single pin name */
/*执行处理器初始化 */
sysinit();
// cpu_identify();
systick_init();
GPIO_PinInit(GPIO_PTB5, GPIO_PinOutput);
printf("\nRunning the GPIO_demo project.\n");
while (1){
/* Delay 1000 ms */
systick_delay_s(1u);
GPIO_PinSet(GPIO_PTB5);
systick_delay_s(1u);
GPIO_PinClear(GPIO_PTB5);
}
}
|
|