SAM4S Xplained Pro的SysTick测试例程

作者: lanyuye
上传时间为: 2014-11-21 01:15 PM

实验目的:配置SysTick外设定时使LED0闪烁!

一、通过数据手册了解SysTick

1、24位宽的计数器

2、相关寄存器

二、初始化库函数

注意:ticks最大是0X00FFFFFF(16777215

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

 if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */

 SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */

 NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */

 SysTick->VAL = 0; /* Load the SysTick Counter Value */

 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |/*时钟源=处理器时钟*/

 SysTick_CTRL_TICKINT_Msk |/*使能SysTick异常请求*/

 SysTick_CTRL_ENABLE_Msk; /* 计数使能 Enable SysTick IRQ and SysTick Timer */

 return (0); /* Function successful */

}

//中断函数

void SysTick_Handler(void)

{

static unsigned char i=0;

if(i==0)

{

i=1;

ioport_set_pin_level(LED_0_PIN, !LED_0_ACTIVE);//PC23=0

}

else

{

i=0;

ioport_set_pin_level(LED_0_PIN, LED_0_ACTIVE);//PC23=0

}

}

//配置SYSTICK

//12000000,5HZ

SysTick_Config(12000000);

三、了解时钟关系

系统时钟

在sysclk_init();函数中

选择外部XTAL 12M为时钟源,然后PLL到120M,在经PMC_MCKR 2分频到60MHZ

那就是为什么计数12000000后是5HZ的原因。

#ifdef CONFIG_PLL0_SOURCE//使用pllack作为主时钟源

else if (CONFIG_SYSCLK_SOURCE == SYSCLK_SRC_PLLACK) {

struct pll_config pllcfg;

pll_enable_source(CONFIG_PLL0_SOURCE);//PLL时钟源:外部晶体振荡器

pll_config_defaults(&pllcfg, 0);

pll_enable(&pllcfg, 0);

pll_wait_for_lock(0);

pmc_switch_mck_to_pllack(CONFIG_SYSCLK_PRES);//设置主时钟的2分频器后MCU=60M: PLL倍频120M后,经Master Clock Controller(PMC_MCKR) 2分频

}

#endif

ATEML的Atmel Studio 6.2工具在编译时应该做了些判断

当输入SYSTICK计数上限时,初始化中不让添加中断

范围内

还有使用问题,中断函数里中断怎么加不进去!有时LOAD后会调试没反应掉!

全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示