有没有人用TI的这款芯片,我在应用的时候发现个小问题,求大神帮助啊~~
这个问题是关于系统时钟的,我目前在做一个对于上电开始工作时间要求比较高的项目,要求是从上电到开始跑程序的时间要尽可能的短,在程序的开始,要设置时钟,我么要跑80M,用的外接晶振6M,开PLL,分频2.5.我本来是用TI的库函数SysCtlClockSet();来进行时钟设定的,后来实测发现这个函数需要浪费100ms,达不到我的要求,我变找个这个函数的源代码,缩短了打开外部晶振后延时的等待(这里标准库函数等待了98ms),但发现删除以后,还是有19ms左右的延时,经过仿真发现,这一部分延时是在我打开外部时钟后,切换时钟源修改寄存器时的等待。测试时发现一个奇怪的现象,只要我在切换时钟源前等待的延时小于19ms,这个程序总是会跑19ms,非常的奇怪,付我的程序:
// 系统时钟初始化
void ClockInit(void)
{
unsigned long ulDelay, ulRCC, ulRCC2, ulConfig;
ulConfig = SYSCTL_USE_PLL | // 系统时钟设置 使用PLL
SYSCTL_OSC_MAIN | // 采用主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_2_5;
ulRCC = HWREG(SYSCTL_RCC);
ulRCC2 = HWREG(SYSCTL_RCC2);
ulRCC &= (~(SYSCTL_RCC_IOSCDIS | SYSCTL_RCC_MOSCDIS) |
(ulConfig & (SYSCTL_RCC_IOSCDIS | SYSCTL_RCC_MOSCDIS)));
HWREG(SYSCTL_RCC) = ulRCC;
SysCtlDelay(65536);
ulRCC &= ~(SYSCTL_RCC_XTAL_M | SYSCTL_RCC_OSCSRC_M);
ulRCC |= ulConfig & (SYSCTL_RCC_XTAL_M | SYSCTL_RCC_OSCSRC_M);
ulRCC2 &= ~(SYSCTL_RCC2_USERCC2 | SYSCTL_RCC2_OSCSRC2_M);
ulRCC2 |= ulConfig & (SYSCTL_RCC2_USERCC2 | SYSCTL_RCC_OSCSRC_M);
ulRCC2 |= (ulConfig & 0x00000008) << 3;
HWREG(SYSCTL_RCC) = ulRCC;
HWREG(SYSCTL_RCC2) = ulRCC2;
SysCtlDelay(16);
在这段程序里,只要前面那个延时小于19ms,那这段程序总是会跑19ms,感觉和程序语句完全不想管了,有没有大神帮忙看一下,哈,谢谢 |