您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页rtc_alarm ARM 驱动

rtc_alarm ARM 驱动

来源:五一七教育网


#include \"s5pc100.h\"

//发送1个字符

void put_char(const char data)

{

while( !(UART0.UTRSTAT0 & 0x2) );

UART0.UTXH0 = data;

if(data == '\\n')

put_char('\\r');

}

//接收1个字符

char get_char()

{

while( !(UART0.UTRSTAT0 & 0x1) )

return UART0.URXH0;

}

//发送1个字符串

void put_string(const char *pstr)

{

while(*pstr != '\\0')

put_char(*pstr++);

}

//软件延时

void soft_delay( unsigned int mloop )

{

while( --mloop>0 );

}

//串口的初始化

void uart_init()

{

//GPA0.GPA0CON = 0x22; //设置UART接口引脚

//TX FIFO TRIGER | RX FIFO TRIGER | TX FIFO RESET | RX FIFO RESET | FIFO EN

// [7:6] [5:4] [2] [1] [0]

UART0.UFCON0 = 0X00; //FIFO设置寄存器, 禁止使用FIFO

//

UART0.UMCON0 = 0X00; //MODEM设置寄存器,禁止使用AFC

//INFRARED MODE | PARITY MODE | STOP BIT | WORD LEN

//[6] [5:3] [2] [1:0]

UART0.ULCON0 = 0x03; //UART LINE CONTROL,设置数据位格式8 n 1

UART0.UCON0 = (1<<9) | (1<<8) | (1<<2) | (1<<0);

//波特率由 UBRDIV 与 UDIVSLOT0共同决定

//660000000/(16*115200) - 1 = 0x22

UART0.UBRDIV0 = 0X22; //设置波特率115200 bps

UART0.UDIVSLOT0 = 0xdfdd; //

put_string(\"open uart device ok !\\n\");

}

//alarm初始化函数

void alarm_init(void)

{

RTCCON = 0X01;

RTCBCD.BCDSEC = 0x0; //秒

RTCBCD.BCDMIN = 0x59; //分

RTCBCD.BCDHOUR = 0x12; //小时

RTCBCD.BCDDATE = 0x15; //日期

RTCBCD.BCDMON = 0x03; //月

RTCBCD.BCDYEAR = 0x12; //年

RTALM.ALMYEAR = RTCBCD.BCDYEAR ;

RTALM.ALMMON = RTCBCD.BCDMON ;

RTALM.ALMDATE = RTCBCD.BCDDATE ;

RTALM.ALMHOUR = RTCBCD.BCDHOUR ;

RTALM.ALMMIN = RTCBCD.BCDMIN ;

RTALM.ALMSEC = RTCBCD.BCDSEC + 0x20; //系统启动20s后进入alarm中断

RTALM.RTCALM = 0x7f;

RTCCON = 0;

}

//alarm初始化函数

void rtc_tick_init(void)

{

RTCCON = 0X01;

RTALM.RTCALM = 0x7f;

RTCCON = 0;

}

//RTC中断处理函数

void rtcalarm_irq_handler( void )

{

RTCINTP = (1<<1);

VIC0ADDRESS = 0;

put_string(\"clock alarm \");

}

#define VIC0VECTADDR28 ( *( (volatile unsigned int *)0xe4000170 ) )

//主函数

int main()

{

uart_init();

VIC0VECTADDR28 = (unsigned int)rtcalarm_irq_handler; //注册rtc_alarm中断处理函数

alarm_init();

INTERRUPT.VIC0INTENABLE = INTERRUPT.VIC0INTENABLE | (1<<28);

while(1);

return 0;

}

.TEXT

.global _start

_start:

mov r0, #0xfffffff

mcr p15, 0, r0, c1, c0, 2 @使用户模式可以访问所有的协处理器

ldr r5, =0xffffffff

mcr p15, 0, r5, c3, c0, 0 @加上此语句能够在调试时查看到寄存器的值

@初始化所有常用的模式堆栈

ldr r0,stacktop /*get stack top pointer*/

/********svc mode stack********/

mov sp,r0

sub r0,#128*4 //512 byte for irq mode of stack

/****irq mode stack**/

msr cpsr,#0xd2

mov sp,r0

sub r0,#128*4 //512 byte for irq mode of stack

/***fiq mode stack***/

msr cpsr,#0xd1

mov sp,r0

sub r0,#0

/***abort mode stack***/

msr cpsr,#0xd7

mov sp,r0

sub r0,#0

/***undefine mode stack***/

msr cpsr,#0xdb

mov sp,r0

sub r0,#0

/*** sys mode and usr mode stack ***/

msr cpsr,#0x10

mov sp,r0

b main

stop:

b stop

stacktop:

.word stack+4*512

.data

stack: .space 4*512

.end

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务