裸机编程时序的调整需要根据具体的芯片手册和设计需求来进行。以下是一些常见的步骤和注意事项:
理解时钟配置
上电复位:CPU在上电后,nRESET复位信号拉低,此时CPU无法取指令工作。复位信号结束后,CPU开始工作,主频FCLK等于振荡器频率(osc)。
配置PLL:通过配置PLL(相位锁环),可以将FCLK倍频成新的时钟。需要配置lock time、MDIV、PDIV和SDIV等参数。
配置CLKDIVN:通过配置CLKDIVN寄存器,可以将FCLK分成HCLK和PCLK。
查看芯片手册
仔细阅读目标芯片的手册,了解时钟配置、时序图和控制器使能等详细信息。例如,S3C2440芯片手册中会提供HCLK、FCLK和PCLK的设置方法,以及NandFlash的时序图和控制器的使能信号。
设置时序参数
根据手册中的时序图,设置相应的时序参数。例如,NandFlash的写使能释放后,需要等待一段时间(tCLH和tALH),这些参数通常以纳秒为单位。
确保设置的时序参数满足芯片的工作要求,避免时钟周期不匹配导致的数据传输错误。
使能控制器
在配置好时钟后,需要使能NandFlash控制器,并进行初始化操作。例如,设置NAND FLASH的时序参数和控制器的使能信号。
验证和调整
在编程过程中,可以通过调试和测试来验证时序配置是否正确。如果发现问题时,可以根据手册中的建议进行调整,直到满足设计要求。
```c
// 配置FCLK, HCLK, PCLK
// FCLK = 400MHz
// HCLK = 100MHz
// PCLK = 50MHz
// 配置PLL
// LOCKTIME = 0xFFFFFFFF
// MPLL(FCLK) = 2 * 100 * 12 / (3 * 2^1) = 400MHz
// 配置CLKDIVN
// CLKDIVN(0x4C000014) = 0x5
// 初始化NandFlash
void nand_init(void) {
define TACLS 0
define TWRPH0 1
define TWRPH1 0
// 设置NAND FLASH的时序
NFC ONF = (TACLS << 12) | (TWRPH0 << 8) | (TWRPH1 << 4);
// 使能NAND FLASH控制器, 初始化ECC, 禁止片选
NFCONT = (1 << 4) | (1 << 1) | (1 << 0);
}
```
通过以上步骤和示例代码,可以初步完成裸机编程时序的配置和调试。请确保在实际应用中根据具体需求和芯片手册进行详细调整和验证。