打印
[ZLG-ARM]

会led了就是不中断

[复制链接]
1512|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
无语凝咽|  楼主 | 2010-6-18 19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LED, ic, vi, BLE, se
我还不会用LPC2000 ARM的中断,我写的程序进不了中断,
关于VICIntEnable,VICIntSelect
以下是KEIL的例子,那里有VICIntEnable,VICIntSelect的详细说明?
在周立功的用户指南里只是简单的提一下,这个寄存器是干什么用的,但并没有说明如下的VICIntSelect     = 0x00008000;//这个0x00008000是依据什么来定的?又如VICIntEnable    = 0x00008000;//当是EXTINT0、或串口时又如何设置?
void initFiq(void)
{
IODIR1        = 0x00FF0000;                            //Set the LED pins as outputs
PINSEL0         = 0x20000000;                            //Enable the EXTINT1 interrupt
VICIntSelect     = 0x00008000;                            //Enable a Vic Channel as FIQ
VICIntEnable    = 0x00008000;

相关帖子

沙发
手写识别| | 2010-6-18 20:03 | 只看该作者
这些寄存器中每一位控制的中断源在该小节中有说明0x00008000表示第16位为1,即中断源为“外部中断1”(参看《基础教程》表5.63)。

使用特权

评论回复
板凳
无语凝咽|  楼主 | 2010-6-18 20:03 | 只看该作者
多谢指点,我看了你们的课件后,写了以下程序,
#include "uart.h"
//=============================================
#define BaudRate 115200
#define Fosc 14318180
#define VPB 1
#define MSEL 4
#define PSEL 2
#define cclk MSEL*Fosc/VPB
#define Uart0_value cclk/16/BaudRate
//=============================================
void uart0_isr(void)__irq
{
unsigned char U0IIR_value,test;
test = U0LSR;
U0IIR_value = U0IIR;
if(U0IIR_value&0x01)//为1时,没有中断挂起。
{
  
}
else
{
  switch(U0IIR_value&0x07)
  {
   case 0x06: break;
   case 0x04:    //接收数据可用或FIFO到达触发点。
      test = U0RBR;
      U0THR = test;
      break;
   case 0x0C: break;//字符超时
   case 0x02: break;//THER空
   default: break;
  }
}
}
void  DefaultIRQ(void)__irq
{

}
void init_uart(void)
{
  PINSEL0 = 0x01e00005;           /* Enable RxD0 and TxD0                     */
   U0LCR = 0x83;                   /* 8 bits, no Parity, 1 Stop bit            */
   U0DLL = Uart0_value;            /* 115200Baud Rate               */
   U0LCR = 0x03;     /* DLAB = 0         */
U0IER = 0x03;     /* Enable UART0 intrrupt      */

   VICIntSelect   = 0x00000000; /*Enable a Vic Channel as IRQ    */
   VICIntEnable   = 1<<6;   /* Set Default interrupt vector     */
   VICDefVectAddr = (unsigned long)DefaultIRQ; //非向量中断入口地址。
VICVectCntl0 = 0x26;      //设置优先级0为第6中断源,并打开中断源6的中断允许。
VICVectAddr0 = (unsigned long)uart0_isr;/*把uart_isr函数的入口地址赋给优先为0的中断源的中断入口地址。*/
IODIR0 = 0x01e00000;
IOSET0 = 0x01e00000;
}
/*这是我写的串口测试程序,为什么PC只收到最开始的数据呢?到第二个数据就收不到了。我给他发了N个数据!*/

使用特权

评论回复
地板
思行合一| | 2010-6-18 20:04 | 只看该作者
建议参看我们提供的串口中间件程序,里面有串口和中断的使用方法

使用特权

评论回复
5
6019实验室| | 2010-6-18 20:04 | 只看该作者
多谢zlgARM我只有你们的课件、用户手册、DATASHEET。书就没有了!十分感谢你的帮忙!

使用特权

评论回复
6
linux1| | 2010-6-18 20:05 | 只看该作者
我是easy ARM 2100 的用户,也有相同的迷惑配套的用户手册的确不详细,对寄存器的每一位代表的含义就是不太了解!
请问《基础教程》是书还是电子档?

使用特权

评论回复
7
米其林r| | 2010-6-18 20:07 | 只看该作者
基础教程》是用户手册,还是在市面上买的?《基础教程》是用户手册,还是在市面上买的?书名全称吗?

使用特权

评论回复
8
LPC300| | 2010-6-18 20:07 | 只看该作者
;《ARM嵌入式系统基础教程》,北京航空航天大学出版社出版.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

399

帖子

1

粉丝