实验目的:通过使用MPLL提高系统时钟,启动定时器产生中断来点亮LED灯,启动Watchdog定时器,如果程序跑飞,借助Watchdog重新运行程序,借此掌握S3C2410的时钟管理、PWM及看门狗定时器。
实验环境及说明:恒颐S3C2410开发板H2410。
实验思路:开发板上电启动后,自动将NandFlash开始的4K数据复制到SRAM中,然后跳转到0地址开始执行。然后来设置MPLL来改变FCLK、HCLK、PCLK的值,初始化存储控制器来使用SDRAM。初始化LED灯管脚、定时中断控制器和看门狗,使能定时中断控制器和看门狗。之后进入main函数死循环等待中断的发生,每隔设定的时间触发定时中断,调用定时中断处理函数点亮/熄灭LED灯。若程序跑飞,触发看门狗重启。
知识掌握:系统时钟、PWM定时器和Watchdog定时器
一、系统时钟:S3C2410的时钟控制逻辑为整个芯片提供了三种时钟。
★FCLK用于CPU核;HCLK用于AHB总线上设备---CPU核、存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块;PCLK用于APB总线上设备---Watchdog、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI。
★AHB(Advanced High performance Bus)---主要用于高性能模块间的连接;APB(Advanced Peripheral Bus)---主要用于低带宽的周边外设之间的连接。
★开发板时钟频率为12MHz,主要是为了降低电磁干扰和板间布线要求,需要通过PLL提高系统时钟。S3C2410包括MPLL(用于FCLK、HCLK、PLCK)和UPLL(用于USB设备),他们的设置方法类似。开发板上电→FCLK=Fin(外部输入时钟)→设置MPLL相关寄存器→等待(Lock Time:长短由寄存器LOCKTIME设定)→MPLL输出稳定,CPU工作在新的时钟FCLK下。
★interrupt.c文件实现中断的处理,主要代码:
/*
* 定时器0中断处理函数
*/
void Timer0_Handle(void)
{
//喂狗
WTCNT=0x8000;
//每次中断令4个LED改变状态
if(INTOFFSET == 10)
GPFDAT = ~(GPFDAT & (0xf << 4));
//清中断
SRCPND = 1 << INTOFFSET;
INTPND = INTPND;
}
相关文章: