📄 test_rtc.c
字号:
/* * test_rtc.c -- demo of test real-time clock application * * Author: lumit-admin <admin@lumit.org> * Date: 2005-1-10 * Copyright: http://www.lumit.org */#include "led.h"#include <stdio.h>//#define SYSCFG (0x03ff0000)#define UART0_BASE (SYSCFG + 0xD000)#define UART1_BASE (SYSCFG + 0xE000)/* * Serial settings....................... */ #define ULCON 0x00 #define UCON 0x04#define USTAT 0x08#define UTXBUF 0x0C#define URXBUF 0x10#define UBRDIV 0x14/* * Line control register bits............ */ #define ULCR8bits (3)#define ULCRS1StopBit (0)#define ULCRNoParity (0)/* * UART Control Register bits............ */ #define UCRRxM (1)#define UCRRxSI (1 << 2)#define UCRTxM (1 << 3)#define UCRLPB (1 << 7)/* * UART Status Register bits */ #define USROverrun (1 << 0)#define USRParity (1 << 1)#define USRFraming (1 << 2)#define USRBreak (1 << 3)#define USRDTR (1 << 4)#define USRRxData (1 << 5) #define USRTxHoldEmpty (1 << 6)#define USRTxEmpty (1 << 7)#define GET_STATUS(p) (*(volatile unsigned *)((p) + USTAT))#define RX_DATA(s) ((s) & USRRxData)#define GET_CHAR(p) (*(volatile unsigned *)((p) + URXBUF))#define TX_READY(s) ((s) & USRTxHoldEmpty)#define PUT_CHAR(p,c) (*(unsigned *)((p) + UTXBUF) = (unsigned )(c))void delay(){ int i, j; for( i=0; i<50; i++ ) for ( j=0; j<65536; j++ ) ;}void loop( void ){ LED_1_ON; LED_2_ON; LED_3_ON; LED_4_ON; delay(); LED_1_OFF; LED_2_OFF; LED_3_OFF; LED_4_OFF; delay(); LED_1_ON; LED_2_ON; LED_3_ON; LED_4_ON;}int putchar_uart0(int ch){ /* Place your implementation of fputc here */ /* e.g. write a character to a UART, or to the */ /* debugger console with SWI WriteC */ while ( TX_READY(GET_STATUS(UART0_BASE))==0); PUT_CHAR(UART0_BASE, ch); return ch;}struct __FILE { int handle; /* Add whatever you need here */};FILE __stdout;int fputc(int ch, FILE *f){ /* Place your implementation of fputc here */ /* e.g. write a character to a UART, or to the */ /* debugger console with SWI WriteC */ putchar_uart0( ch ); return ch;}int ferror(FILE *f){ /* Your implementation of ferror */ return EOF;}void install_irqhandler(void * isr){ /* ARM irq exception vector addr is 0x00000018 */ unsigned int * irq_vec_addr = ( unsigned int * ) 0x18; /* this is isr entry address, could be another address like 0x3c, 0x58... */ unsigned int * isr_entry_addr = ( unsigned int * ) 0x38; unsigned int instruction; /* set the ISR entry at 0x38 */ *isr_entry_addr = (unsigned int)isr; /* make an instruction: it is machine-code for "ldr pc, [pc, #(38-18-8)]" */ instruction = ((unsigned int) isr_entry_addr - (unsigned int)irq_vec_addr - 0x08) | 0xe59ff000; /* set this instruction at 0x18 */ *irq_vec_addr = instruction; }void RTCTest(void);void IRQ_Handler(void);#define REG32 volatile unsigned longvoid SysSetInterrupt(REG32 vector, void (*handler)());//int main (void)void C_Entry( void ){ printf( "C_Entry enter!\r\n" ); printf( "install_irqhandler ..." ); install_irqhandler( (void *)IRQ_Handler ); printf( "ok!\r\n" ); printf( "RTC program test begin!\r\n" ); while(1) IICTest();}/**************************************************************** * End of test_usb.c ****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -