main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mmu.h"
#include "typedef.h"
#include "s3c2451_gpio.h"
#include "s3c2451_uart.h"
#include "s3c2451_irq.h"
#include "S3C2451_vector.h"
#include "S3C2451_Timer.h"
#include "S3C2451_rtc.h"

#define LED1 5
#define LED3  25
#define BIT(n) (1 << (n))

void delay(unsigned int count)
{
	int j = 1000;
	int i = 0;
	while(--j)
		for(i =count; i > 0; i --);
}

//uart0 的中断服务程序
void uart0_irq(void)
{
	U8 recv;
	
	if(IRQ1_GetSUBPND(SUB_INT_RXD0) == BIT_SET){	
			IRQ1_ClearSUBPND(SUB_INT_RXD0);
			recv = UART_ReceiveData(UART0);
	    UART_SendData(UART0, recv);
	}
	
	if(IRQ1_GetSUBPND(SUB_INT_ERR0) == BIT_SET){	
		IRQ1_ClearSUBPND(SUB_INT_ERR0);
		//打印出错
	}
	
	IRQ1_ClearPND(INT_UART0);

}
U32 count = 0;
int sendCurrentTimer(U32 time)
{
	U32 tmpMSec =0,tmpSec = 0,tmpMin=0, tmpHour=0;
	char Buffer[32] ;
	memset(Buffer, 0, 32);
	
	tmpMSec = time%1000;
	tmpSec = time/1000;
	
	tmpMin = tmpSec/60;
	tmpSec = tmpSec%60;
	
	tmpHour = tmpMin/60;
	tmpMin = tmpMin%60;
	
	sprintf(Buffer, "%02u:%02u:%02u::%03u\n", tmpHour, tmpMin, tmpSec, tmpMSec);
	UART_SendString(UART0, (U8 *)Buffer);
	
//	UART_Printf("%02u:%02u:%02u::%03u\n", tmpHour, tmpMin, tmpSec, tmpMSec);
	return 0;
}

void eint0_irq(void)
{
	IRQ1_ClearPND(INT_EINT0);
	//UART_SendData(UART0, 'EInt0 Ocurr');
	sendCurrentTimer(count*10);
}


void timer0_irq(void)
{
	IRQ1_ClearPND(INT_TIMER0);
//	UART_SendString(UART0, "timer0 interrupt.\n");
	count ++;	
	if(count%100 == 0)
		sendCurrentTimer(count*10);
}

void tick_irq(void)
{
	Time_InitTypeDef rtc_time;
	IRQ1_ClearPND(INT_TICK);
	RTC_Time_Get(&rtc_time);
	UART_Printf("20%x-%02x-%02x %02x:%02x:%02x.\n", rtc_time.year, rtc_time.month, rtc_time.day, rtc_time.hour, rtc_time.minute, rtc_time.second);
}

void Main()
{	

	GPIO_Init_Typedef gpio_init_struct;
	UART_Init_Typedef uart_init_struct;
	TIM_TimeBaseInitTypeDef tim_timbaseinit_structure;	
	Time_InitTypeDef rtc_time;
	
	volatile int *extint0 = (volatile int *)0x56000088;
	
	//MMU初始化:在程序最开始的时候调用
	MMU_Init();		
	
	count = 0;
	//gpio
	gpio_init_struct.pinx = GPIO_PIN_5 |  GPIO_PIN_6;
	gpio_init_struct.mode = GPIO_MODE_OUT;
	gpio_init_struct.udp = GPIO_UDP_DISABLE;	
  GPIO_Init(GPIOB, gpio_init_struct);

	gpio_init_struct.pinx = GPIO_PIN_0;
	gpio_init_struct.mode = GPIO_MODE_ALT;
	gpio_init_struct.udp = GPIO_UDP_DISABLE;	
  GPIO_Init(GPIOF, gpio_init_struct);
	
	
	//uart
	uart_init_struct.baudrate = 115200;
	uart_init_struct.mode = UART_Mode_TX | UART_Mode_RX; 
	uart_init_struct.parity = Parity_No; //禁止奇偶校验
	uart_init_struct.stop = STOP_1Bit;
	uart_init_struct.wordwidth = WordWidth_8BIT;
	UART_Init(UART0, uart_init_struct);
	
	UART_IRQService_Init(UART0, (U32)uart0_irq); //注册中断服务程序
	
	IRQ1_INTMask_Init(INT_UART0, ENABLE);
	IRQ1_INTSUBMask_Init(SUB_INT_RXD0,ENABLE);
	IRQ1_INTSUBMask_Init(SUB_INT_ERR0,ENABLE);
	
	//外部中断
	*extint0 |= (1<< 1);
	*extint0 &= ~(1<<2);
	
	pISR_EINT0 = (U32)eint0_irq;
	IRQ1_INTMask_Init(INT_EINT0, ENABLE);	
	
  UART_SendString(UART0, (U8 *)"Test Start !\n\r");	
	
	//timer pclk 66.5Mhz 1hz
	tim_timbaseinit_structure.TIM_Prescale = 200;
	tim_timbaseinit_structure.TIM_Scale = 0x02; //1/8
	tim_timbaseinit_structure.TIM_CountVal = 41562;	
	
	TIM_TimeBaseInit(Timer_Ch0 , tim_timbaseinit_structure);
	
	TIM_Interrupt_IRQInit(Timer_Ch0, (U32)timer0_irq);
	IRQ1_INTMask_Init(INT_TIMER0,ENABLE);

//RTC
		RTC_Time_Get(&rtc_time);
		UART_Printf("20%x-%x-%x %x:%x:%x.\n", rtc_time.year, rtc_time.month, rtc_time.day, rtc_time.hour, rtc_time.minute, rtc_time.second);
	
	rtc_time.year = 0x17;
	rtc_time.month = 0x04;
	rtc_time.day = 0x15;
	rtc_time.hour = 0x17;
	rtc_time.minute = 0x18;
	rtc_time.second = 0;
	RTC_Time_Set(rtc_time);
	
	RTC_IRQ_Init( 127,ENABLE);
	RTCTick_Interrupt_IRQInit((U32) tick_irq);
	IRQ1_INTMask_Init(INT_TICK, ENABLE);


	while(1){		
		
//			if(UART_IsRecved(UART0)){
//				recv = UART_ReceiveData(UART0);
//				UART_SendData(UART0, recv);
//			}

		
		  GPIO_WriteBit(GPIOB, GPIO_PIN_5, BIT_RESET);
		  GPIO_WriteBit(GPIOB, GPIO_PIN_6, BIT_RESET);
			delay(12000);
			
		  GPIO_WriteBit(GPIOB, GPIO_PIN_5, BIT_SET);
		  GPIO_WriteBit(GPIOB, GPIO_PIN_6, BIT_SET);
			delay(12000);
		};
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值