led.c
来自「《ARM与嵌入式系统基础教程》」· C语言 代码 · 共 72 行
C
72 行
//*------------------------------------------------------------------------------------------------
//* 文件名 : Led.c
//* 功能描述 : 系统入口函数文件
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、时间 : 2007/02/01 13:17
//* 最近修改日期、时间 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 头文件 -----------------------------------------------
#include "/at91sam7x256/include/AT91SAM7X256.h"
#include "/at91sam7x256/include/lib_AT91SAM7X256.h"
//*================================================================================================
//* 函 数 区
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函数名称 : SYSEntry
//* 功能描述 : 系统入口函数,能够使用快速时钟驱动LED1快速闪烁
//* 入口参数 : 无
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
int SYSEntry(void)
{
AT91PS_PMC pPMC = AT91C_BASE_PMC;
int i;
/* ------时钟选择代码开始------ */
//* 第一步:主振荡器使能,并设置主振荡器的启动时间:从数据手册得知SCK为32768Hz,则其一个周期为
//* 1/32768微妙,指定CKGR_MOR寄存器的OSCOUNT值为7,则启动时间为7 * 8 * (1/32768) = 1708.984375uS(微妙)
pPMC->PMC_MOR = (0x07 << 8) | AT91C_CKGR_MOSCEN;
//* 等待主振荡器稳定,也就是等待上面指定的主振荡器启动时间结束
while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
//* 第二步:设置PLL的分频、倍频数及锁定时间。因为UDP(即USB设备口)需要48000000Hz时钟,所以必须对18432000Hz
//* 的输入时钟经PLL分频(24)、倍频(MUL + 1 = 125),得到96000000Hz的时钟输出后,再对其2分频才能得到48000000Hz
//* 时钟,其计算公式为:((18432000 / 24) * 125) / 2 = 48000000。
//* 指定PLL锁定时间为28个SCK周期数即28 * (1/32768) = 854.4921875uS
pPMC->PMC_PLLR = 24 | (28 << 8) | (124 << 16) | AT91C_CKGR_USBDIV_1;
//* 等待指定的PLL启动时间结束
while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
//* 第三步:设置PLL时钟为2分频
pPMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
//* 第四步:选择PLL时钟为系统主时钟MCK
pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
/* ------时钟选择代码结束------ */
//* *(unsigned int*)0xFFFFFC10 = (unsigned int)1 << 3;
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOB);
//* *(unsigned int*)0xFFFFF600 = (unsigned int)1 << 19;
//* *(unsigned int*)0xFFFFF610 = (unsigned int)1 << 19;
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
while(1)
{
// *(unsigned int*)0xFFFFF634 = (unsigned int)1 << 19;
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, 1 << 19);
for(i=0; i<500000; i++);
//* *(unsigned int*)0xFFFFF630 = (unsigned int)1 << 19;
AT91F_PIO_SetOutput(AT91C_BASE_PIOB, 1 << 19);
for(i=0; i<500000; i++);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?