ADS中断访问UART S3C2440

欢迎大家指正错误 

;Init.s

 AREA init,CODE,READONLY
 ENTRY
 ldr r13,=0x1000
 mrs r0,cpsr
 bic    r0, r0,#0x80   ;打开IRQ中断,刚开始就是因为这个中断没有打开,导致按键后一直没有产生中断
 msr    cpsr_c,r0
 IMPORT Main
 b Main
 END

;helun.h

//配置中断向量表 及 寄存器地址
#define _ISR_STARTADDRESS  0x33ffff00

// Exception vector
#define pISR_RESET  (*(unsigned *)(_ISR_STARTADDRESS+0x0))
#define pISR_UNDEF  (*(unsigned *)(_ISR_STARTADDRESS+0x4))
#define pISR_SWI  (*(unsigned *)(_ISR_STARTADDRESS+0x8))
#define pISR_PABORT  (*(unsigned *)(_ISR_STARTADDRESS+0xc))
#define pISR_DABORT  (*(unsigned *)(_ISR_STARTADDRESS+0x10))
#define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14))
#define pISR_IRQ  (*(unsigned *)(_ISR_STARTADDRESS+0x18))
#define pISR_FIQ  (*(unsigned *)(_ISR_STARTADDRESS+0x1c))
// Interrupt vector
#define pISR_EINT0  (*(unsigned *)(_ISR_STARTADDRESS+0x20))
#define pISR_EINT1  (*(unsigned *)(_ISR_STARTADDRESS+0x24))
#define pISR_EINT2  (*(unsigned *)(_ISR_STARTADDRESS+0x28))
#define pISR_EINT3  (*(unsigned *)(_ISR_STARTADDRESS+0x2c))
#define pISR_EINT4_7 (*(unsigned *)(_ISR_STARTADDRESS+0x30))
#define pISR_EINT8_23 (*(unsigned *)(_ISR_STARTADDRESS+0x34))
#define pISR_CAM  (*(unsigned *)(_ISR_STARTADDRESS+0x38))  // Added for 2440.
#define pISR_BAT_FLT (*(unsigned *)(_ISR_STARTADDRESS+0x3c))
#define pISR_TICK  (*(unsigned *)(_ISR_STARTADDRESS+0x40))
#define pISR_WDT_AC97  (*(unsigned *)(_ISR_STARTADDRESS+0x44))
#define pISR_TIMER0   (*(unsigned *)(_ISR_STARTADDRESS+0x48))
#define pISR_TIMER1   (*(unsigned *)(_ISR_STARTADDRESS+0x4c))
#define pISR_TIMER2  (*(unsigned *)(_ISR_STARTADDRESS+0x50))
#define pISR_TIMER3  (*(unsigned *)(_ISR_STARTADDRESS+0x54))
#define pISR_TIMER4  (*(unsigned *)(_ISR_STARTADDRESS+0x58))
#define pISR_UART2  (*(unsigned *)(_ISR_STARTADDRESS+0x5c))
#define pISR_LCD  (*(unsigned *)(_ISR_STARTADDRESS+0x60))
#define pISR_DMA0  (*(unsigned *)(_ISR_STARTADDRESS+0x64))
#define pISR_DMA1  (*(unsigned *)(_ISR_STARTADDRESS+0x68))
#define pISR_DMA2  (*(unsigned *)(_ISR_STARTADDRESS+0x6c))
#define pISR_DMA3  (*(unsigned *)(_ISR_STARTADDRESS+0x70))
#define pISR_SDI  (*(unsigned *)(_ISR_STARTADDRESS+0x74))
#define pISR_SPI0  (*(unsigned *)(_ISR_STARTADDRESS+0x78))
#define pISR_UART1  (*(unsigned *)(_ISR_STARTADDRESS+0x7c))
#define pISR_NFCON  (*(unsigned *)(_ISR_STARTADDRESS+0x80))  // Added for 2440.
#define pISR_USBD  (*(unsigned *)(_ISR_STARTADDRESS+0x84))
#define pISR_USBH  (*(unsigned *)(_ISR_STARTADDRESS+0x88))
#define pISR_IIC  (*(unsigned *)(_ISR_STARTADDRESS+0x8c))
#define pISR_UART0  (*(unsigned *)(_ISR_STARTADDRESS+0x90))
#define pISR_SPI1  (*(unsigned *)(_ISR_STARTADDRESS+0x94))
#define pISR_RTC  (*(unsigned *)(_ISR_STARTADDRESS+0x98))
#define pISR_ADC  (*(unsigned *)(_ISR_STARTADDRESS+0x9c))

//I/O
#define rGPHCON    (*(volatile unsigned *)0x56000070) //Port H control
#define rGPHDAT    (*(volatile unsigned *)0x56000074) //Port H data
#define rGPHUP     (*(volatile unsigned *)0x56000078) //Pull-up control H

// INTERRUPT
#define rSRCPND     (*(volatile unsigned *)0x4a000000) //Interrupt request status
#define rINTMOD     (*(volatile unsigned *)0x4a000004) //Interrupt mode control
#define rINTMSK     (*(volatile unsigned *)0x4a000008) //Interrupt mask control
#define rPRIORITY   (*(volatile unsigned *)0x4a00000c) //IRQ priority control
#define rINTPND     (*(volatile unsigned *)0x4a000010) //Interrupt request status
#define rINTOFFSET  (*(volatile unsigned *)0x4a000014) //Interruot request source offset
#define rSUBSRCPND  (*(volatile unsigned *)0x4a000018) //Sub source pending
#define rINTSUBMSK  (*(volatile unsigned *)0x4a00001c) //Interrupt sub mask

;uart.c


#include "helun.h"


#define ULCON0   (*(volatile unsigned *)0X50000000)  //UART线控制寄存器
#define UCON0    (*(volatile unsigned *)0X50000004)  //UART控制寄存器
#define UFCON0   (*(volatile unsigned *)0X50000008)  //FIFO控制寄存器
#define UTRSTAT0  (*(volatile unsigned *)0X50000010)  //UART状态寄存器
#define UBRDIV0  (*(volatile unsigned *)0X50000028) //波特率
#define UTXH0    (*(volatile unsigned *)0X50000020)
#define URXH0    (*(volatile unsigned *)0X50000024)
#define GPBDAT   (*(volatile unsigned *)0X58000054)

/*
测试程序 PCLK =50mHZ 115200 ,不使用FIFO 

*/
char buf[20];
int len=0;
void __irq uart0_int(void )
{
 
 char t ;
 int i;
 rSUBSRCPND|=7;/*这个寄存器是写1清零还是写0清零 待测?*/
 rSRCPND|=(1<<28);
 rINTPND|=(1<<28);
 

 t=URXH0;

 if(t!=13)   //13 is '\r'
  {
   buf[len]=t;
   len++;

  }
 else
  {
  for(i=0;i<len;i++)
   {
   UTXH0=buf[i];
   while((UTRSTAT0&2)==0);
   
   }
   UTXH0=13;
  len=0;

  }
// UTXH0=buf+2;
 

 

}


void uart0_init()
{
 /*中断 配置*/

 /*清除之前中断标,  必需要做的*/

 rSUBSRCPND|=7;
 rSRCPND|=(1<<28);
 rINTPND|=(1<<28);
 
  /*这个寄存器是写1清零还是写0清零 待测?*/
 
 /*设置中断模式 ,irq,打开中断 及子中断*/
 rINTMOD&=~(1<<28);
 rINTMSK&=~(1<<28);
 rINTSUBMSK=rINTSUBMSK&(~7)|(1<<1);/*屏蔽发送中断,打开接收中断*/
 //rINTSUBMSK=rINTSUBMSK&(~7);/*屏蔽发送中断,打开接收中断*/

 
 /*UART 配置*/

 rGPHCON=(rGPHCON&(~0xF0))|(0xA<<4);
 rGPHUP|= (1<<2|1<<3); /* 禁止上拉电阻 ,需要测试是否禁止*/
 //rGPHUP&=(~0xc0); /*    打     开 上拉电阻 ,需要测试是否禁止*/
 ULCON0=0x3;
 UCON0=0x5;

 //UFCON0=0x91;
 UFCON0=0x0;/*不使用fifo*/

 UBRDIV0 =0X1A;
 //UBRDIV0 =0X30;


 pISR_UART0=(unsigned )uart0_int;


 }

int Main()
{
 uart0_init();
 while(1);


}

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值