TI中文支持网
TI专业的中文技术问题搜集分享网站

RTCl例程

Other Parts Discussed in Thread:SYSBIOS, OMAP-L138

大家好,我正在测试基于sysbios的RTC例程,按说应该是用硬件中断触发一个服务函数读取实时时钟得值吧,函数主要部分如下

/****************************************************************************/
/* */
/* 实时时钟初始化 */
/* */
/****************************************************************************/
void RTCInit(void)
{
unsigned int UserTime = (0x08473100 | RTC_ANTE_MERIDIEM), UserCalendar = 0x29111000 | RTC_DOTW_MON;

// 禁用 RTC 寄存器写保护
RTCWriteProtectDisable(SOC_RTC_0_REGS);

// 软件复位并使能 RTC
RTCEnable(SOC_RTC_0_REGS);

// 延时 最小3倍 32KH 时钟周期
Delay(0xFFFF);

// 设置时间日期
RTCCalendarSet(SOC_RTC_0_REGS, UserCalendar);
RTCTimeSet(SOC_RTC_0_REGS, UserTime);

// 使能 32KHz 计数器
RTCRun(SOC_RTC_0_REGS);

/****************************************************************************/
/* */
/* 中断服务函数 */
/* */
/****************************************************************************/
void RTCIsr(void)
{
unsigned int timeValue = 0, calendarValue = 0;

// IntEventClear(SYS_INT_RTC_IRQS);

// 读当前时间
timeValue = RTCTimeGet(SOC_RTC_0_REGS);

// 解析时间
// TimeResolve(timeValue);

// 读当前日期
calendarValue = RTCCalendarGet(SOC_RTC_0_REGS);

// UARTPuts(" ", -2);
//
// // 解析日期
// CalendarResolve(calendarValue);
//
// UARTPuts("\r", -2);
}

硬件中断创建如下:

/* RTC Interrupts */
#define SYS_INT_RTC_IRQS 63

但是执行程序的时候会进入exit.c,然后console提示说硬件中断已经被定义过了,可是我一共就2个硬件中断,RTC服务函数用的是中断号5,然后还有一个动态创建串口中断,中断号也不一样的。另外还有2个定时器函数,可是这和硬件中断也不互相影响吧。

下面时动态创建的串口中断

// 动态创建硬件中断
Hwi_Params hwiParams;

Hwi_Params_init(&hwiParams);
hwiParams.eventId = SYS_INT_UART2_INT;
hwiParams.enableInt = true;

Hwi_create(C674X_MASK_INT4, UARTIsr, &hwiParams, NULL);

user6520474:

换了一个中断号10,可以运行程序了,还是不明白中断号5明明没有被用,为什么不行。

然后就是虽然程序可以运行了,但是读取不到时间,在中断函数里面设置断点也进入不到断点,难道是因为我的RTC底座上没有加电池?电池不是掉电的时候保持时间用的吗?

,

Shine:

是和timer1冲突了,timer1默认是都映射到中断15,5的。请参考C:\ti\OMAP-L138 SDK 5.03\bios_6_75_02_00\packages\ti\sysbios\timers\timer64\doc-files里的TimerTables。

赞(0)
未经允许不得转载:TI中文支持网 » RTCl例程
分享到: 更多 (0)