在线时间28 小时
UID2074361
注册时间2015-9-23
NXP金币0
该用户从未签到
注册会员

- 积分
- 184
- 最后登录
- 2017-12-17
|
使用KEA64遇到如下问题:自己做了一块PCB,外接8M晶振+22pf电容+1M电阻;调试硬件时,发现配置内部晶振
void Clk_Init()
{
ICS_C1|=ICS_C1_CLKS_MASK; /* Enable the internal reference clock*/
ICS_C3= 0x90; /* Reference clock frequency = 31.25 KHz*/
while(!(ICS_S & ICS_S_LOCK_MASK)); /* Wait for PLL lock, now running at 40 MHz (1280 * 31.25Khz) */
ICS_C2|=ICS_C2_BDIV(1) ; /*BDIV=2, Bus clock = 20 MHz*/
ICS_S |= ICS_S_LOCK_MASK ; /* Clear Loss of lock sticky bit */
}
这个可以使用,串口9600。
配置外部晶振时
void SystemCoreClockUpdate (void) {
uint32_t ICSOUTClock; /* Variable to store output clock frequency of the ICS module */
uint8_t Divider;
if ((ICS->C1 & ICS_C1_CLKS_MASK) == 0x0u) {
/* Output of FLL is selected */
if ((ICS->C1 & ICS_C1_IREFS_MASK) == 0x0u) {
/* External reference clock is selected */
ICSOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives ICS clock */
Divider = (uint8_t)(1u << ((ICS->C1 & ICS_C1_RDIV_MASK) >> ICS_C1_RDIV_SHIFT));
ICSOUTClock = (ICSOUTClock / Divider); /* Calculate the divided FLL reference clock */
if ((OSC->CR & OSC_CR_RANGE_MASK) != 0x0u) {
ICSOUTClock /= 32u; /* If high range is enabled, additional 32 divider is active */
}
} else {
ICSOUTClock = CPU_INT_CLK_HZ; /* The internal reference clock is selected */
}
ICSOUTClock *= 1280u; /* Apply 1280 FLL multiplier */
} else if ((ICS->C1 & ICS_C1_CLKS_MASK) == 0x40u) {
/* Internal reference clock is selected */
ICSOUTClock = CPU_INT_CLK_HZ;
} else if ((ICS->C1 & ICS_C1_CLKS_MASK) == 0x80u) {
/* External reference clock is selected */
ICSOUTClock = CPU_XTAL_CLK_HZ;
} else {
/* Reserved value */
return;
}
ICSOUTClock = ICSOUTClock >> ((ICS->C2 & ICS_C2_BDIV_MASK) >> ICS_C2_BDIV_SHIFT);
SystemCoreClock = (ICSOUTClock / (1u + ((SIM->CLKDIV & SIM_CLKDIV_OUTDIV1_MASK) >> SIM_CLKDIV_OUTDIV1_SHIFT)));
}
发现KEA64的倍频是1024,不是1280.做了如下测试
倍频 1024 串口波特率设置寄存器 BRU =0,BRL =128,发出的数据不正常
倍频 1024 串口波特率设置寄存器 BRU =0,BRL =109,发出的数据不正常
倍频 1280 串口波特率设置寄存器 BRU =0,BRL =128,发出的数据不正常
倍频 1280 串口波特率设置寄存器 BRU =0,BRL =109,发出的数据不正常
程序的void SystemInit (void) 中的#define DISABLE_WDOG 1,#define CLOCK_SETUP 0
KEIL5环境开发,不知道这个外部时钟到底怎么设置?
另外 KEA64 的CANTX 接收发器的TXD还是RXD,这个我在有的中文翻译手册看到对CANTXD的解释是接收数据。。。
最佳答案
只要你不把该口的ALT 选在NMI功能就可以了
|
|