在线时间19 小时
UID2116607
注册时间2015-2-12
NXP金币0
该用户从未签到
注册会员

- 积分
- 178
- 最后登录
- 2017-3-8
|
首先是MBED的一个实例
#include "mbed.h"
Timer t;
int main()
{
t.start();
printf("Hello World!\n");
t.stop();
printf("The time taken was %f seconds\n", t.read());
}
timer是有许多好用的函数的
还有ticker,更加方便快捷
#include "mbed.h"
Ticker tick;
DigitalOut led1(LED_RED);
DigitalOut led2(LED_GREEN);
void flip()
{
led2 = !led2;
}
int main()
{
tick.attach(&flip, 0.7); // setup ticker to call flip every 0.7 seconds
while (true) {
led1 = !led1;
wait (0.3); // flip led1 every 0.3 seconds
}
}
不过这里先给出例程中的RTC函数
#define MKL_RTC_SOURCE 3 /* Source 0: System oscillator (OSC32KCLK) */
/* Source 1: Reserved */
/* Source 2: RTC_CLKIN */
/* Source 3: LPO 1kHz */
#define MKL_RTC_TSI 0x01 /* Time Seconds Interrupt 时间秒中断 */
#define MKL_RTC_TAI 0x02 /* Time Alarm Interrupt 时间提醒中断 */
#define MKL_RTC_TOI 0x04 /* Time Overflow Interrupt 时间溢出中断 */
#define MKL_RTC_TII 0x08 /* Time Invalid Interrupt 时间无效中断 */
void rtcInit(INT32U ulSeconds)
{
INT32U i;
SIM_SCGC6 |= SIM_SCGC6_RTC_MASK; /* RTC控制时钟使能 */
SIM_SOPT1 = SIM_SOPT1_OSC32KSEL(MKL_RTC_SOURCE); /* RTC时钟源选择 */
RTC_CR = RTC_CR_SWR_MASK; /* RTC软件复位 */
RTC_CR &= ~RTC_CR_SWR_MASK; /* 解除复位 */
if (RTC_SR & RTC_SR_TIF_MASK){ /* 清除TIF标志 */
RTC_TSR = 0x00000000;
}
if (RTC_SR & RTC_SR_TCE_MASK) { /* 如果RTC已经使能,则禁能 */
RTC_SR &= ~RTC_SR_TCE_MASK;
}
RTC_TSR = ulSeconds;
if (MKL_RTC_SOURCE != 3) {
RTC_CR |= RTC_CR_OSCE_MASK|RTC_CR_SC16P_MASK; /* 使能1KHz时钟,接入16pF电容 */
for(i = 0; i < 0x600000; i++); /* 等待时钟源稳定 */
}
}
void rtcIntConfig(INT32U ulAlarm,INT8U ucIntType)
{
if(ucIntType & MKL_RTC_TSI) {
RTC_IER |= RTC_IER_TSIE_MASK;
NVIC_EnableIRQ(RTC_Seconds_IRQn);
NVIC_SetPriority(RTC_Seconds_IRQn,3); /*中断优先级, 用户自己定义 */
}
if(ucIntType & MKL_RTC_TAI) {
RTC_TAR = ulAlarm;
RTC_IER |= RTC_IER_TAIE_MASK;
NVIC_EnableIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn,3); /* 用户自己定义 */
}
if(ucIntType & MKL_RTC_TOI) {
RTC_IER |= RTC_IER_TOIE_MASK;
NVIC_EnableIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn,3); /* 用户自己定义 */
}
if(ucIntType & MKL_RTC_TII) {
RTC_IER |= RTC_IER_TIIE_MASK;
NVIC_EnableIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn,3); /* 用户自己定义 */
}
}
这个rtcIntConfig(1,MKL_RTC_TAI); /* RTC Alarm中断配置 */
、就是设置时间,配置为Time Alarm Interrupt ,看RTC_IER寄存器配置就可以完成。
*********************************************************************************************************
void RTC_IRQHandler(void)
{
if (RTC_SR & RTC_SR_TAF_MASK) {
RTC_TAR = RTC_TAR + 1;
GPIO_TOGGLE(MKL_PORTB,18);
}
if (RTC_SR & RTC_SR_TOF_MASK) {
}
if (RTC_SR & RTC_SR_TIF_MASK) {
}
}
*********************************************************************************************************
这个里面添加你需要处理的事件,然后继续中断。
现在进行下载,就可以看到LED闪烁了。
|
|