打印

求lpc2214或2294AD 中断程序

[复制链接]
2258|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hruid|  楼主 | 2010-8-23 22:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
hruid|  楼主 | 2010-8-28 10:41 | 只看该作者
自己已经写出来,如下,给后来者参考,如有不对,请指出!

//中断程序
void __irq IRQ_AD(void)
{
       

       

       
   // while( ( ADDR & 0x80000000 ) == 0 );
    ADC_Data1 = ADDR;                                                        // 读取ADC结果
        ADC_Data2 = ( ADC_Data1>>6 ) & 0x3FF;         // 提取AD转换值//
         ADC_Data_Use=ADC_Data2;
                        /*if(ADC_Data_Use<50)
                                LED1_LOW_P020;
                        else
                                LED1_HIGHT_P020;*/
        Uint8_AD_finish=1;
         //ADC_Data_Use=ADC_Data2;
        /*Max5306_Output(CH1,(ADC_Data_Use<<1));

         {
                         if(uint8_flag==1)
                         {
                                 
                                         LED3_HIGHT_P018;
                                  uint8_flag=0;
                         }
                         else
                         {
                                 
                                 uint8_flag=1;
                                 LED3_LOW_P018;
                         }
                          AD_Time=0;
                          
                 }

         */
         ADCR |=(1<<24)| 0x01 ; //重新开开始转换
        VICVectAddr = 0;// 中断结束
       

}

//初始化函数
void  IntADInitialization(void)
{
        //uint32 tmp1;
       
        #if 0   // 复位即AD态
        PINSEL1 = ( PINSEL1 & 0xFF3FFFFF ) | ( 0x01 << AD0 ); // P0.27 设为AD0口
        PINSEL2 = ( PINSEL2 & 0xFFFFFFCF ) | ( 0x03 << 4);    // 设置PINSEL[5:4]为11
        PINSEL2 = ( PINSEL2 & 0xFF9FFF3F ) | ( 0x01 << AD4 ) | ( 0x01 << AD5 ) |  ( 0x01 << AD6 ) |( 0x01 << AD7 );
   #endif
   PINSEL1 |=  (1<<22) | (1<<24) | (1<<26) |(1<<28); //
   
    /* 进行ADC模块设置,其中x<<n表示第n位设置为x(若x超过一位,则向高位顺延) */
    ADCR =   (1<<0)                     |                // SEL = 1 ,选择通道0
           (((Fpclk /500000 - 1)) << 8) |                 // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
           (0 << 16)                    |                // BURST = 0 ,软件控制转换操作
           (0 << 17)                    |                 // CLKS = 0 ,使用11clock转换
           (1 << 21)                    |                 // PDN = 1 , 正常工作模式(非掉电转换模式)
           (0 << 22)                    |                 // TEST1:0 = 00 ,正常工作模式(非测试模式)
           (1 << 24)                    |                 // START = 1 ,直接启动ADC转换
           (0 << 27);                                                        // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
    DelayNS(10);                                                               
   
   ADDataA = ADDR;                                                        // 读取ADC结果,并清除DONE标志位
       
}
int  main(void)
{  
       

uint8  i;
uint8  data_buf[10],data_buf1[10];
// 中断分配与使能设置
                 VICIntSelect = 0x00000000;                                 // 设置所有通道为IRQ中断
                 
                 VICVectCntl1= (0x20|4);  //                                 // 定时器0
                 VICVectAddr1 = (uint32)IRQ_Time0;                        // 设置定时器0向量地址
          
                 VICVectCntl0 = (0x20|6);                                        // 将UART0放到VICVectCntl0里面将其中断设置为最高。
                 VICVectAddr0 = (uint32)UART0_Exception;        // 设置UART0向量地址   
                 
                 VICVectCntl2 = (0x20|7);                                        // UART1
                 VICVectAddr2 = (uint32)UART1_Exception;        // 设置UART1向量地址       



                 
                 VICVectCntl3 = (0x20|18);
                 VICVectAddr3 = (uint32)IRQ_AD;
                 /*
                 VICVectCntl3 = (0x20|17);                                        // EINT3
                 VICVectAddr3 = (uint32)IRQ_Eint3;                        // 设置外部中断3   int          
                 */   
                 EXTMODE  = 0x00;                                                        // 设置EINT3中断为电平触发模式
                 EXTPOLAR = 0x0f;                                                        // EINT3高电平触发                  
                 EXTINT   = 1<<3;                                                        // 清除EINT3中断标志
                 VICIntEnable = (/*(1<<4)|(1<<6)|(1<<7)|(1<<9)|*/(1<<18)/*|(1<<17)*/); // 使能Timer0 使能UART0,UART1,T0中断 EINT3


//-------------------------------------------------------------------------------------------------//      
       
        /****************************************系统相关初始化***************************************/   

   IntADInitialization();                     // AD Initialize
       
           ADCR = ( ADCR & 0x003EFF00 ) | CH1 | ( 1 << 24 );        // 设置第Channel通道,并进行第一次转换
    while(1)
    {
          
/*

                         adi++;
                          if(adi <=6)
                          {

                                 
                                 Pos_ad = IntADSimple(AD0);
                                 Pos_Sum+= Pos_ad;
                               
                               
                  
                                         
                          }
                          else
                          {
                  
                          /////////////////////////////
                                 adi=0;
                                // Pos_Avg= Pos_Sum/12;                 
                               
                                 Pos_Avg=Pos_Sum<<1;//(6240=12*520)
                                 Max5306_Output(CH2,Pos_Avg);//平均值滤波
                                  Pos_Sum=0;
                       

                                }*/
               
                        //  Max5306_Output(CH1,(ADC_Data_Use<<1));
                                ADC_Data_Use=ADC_Data2;
                        if(Uint8_AD_finish==1)
                         {
                                 Max5306_Output(CH1,(ADC_Data_Use<<2));
                                Uint8_AD_finish=0;
                       
                                                }

使用特权

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

本版积分规则

个人签名:在电子的世界里,是煎熬,还会遨游呢?

10

主题

56

帖子

0

粉丝