Int2GISR.c
上传用户:inhuatv111
上传日期:2022-08-04
资源大小:292k
文件大小:3k
源码类别:

DSP编程

开发平台:

C/C++

  1. #include "regs2407.h"
  2. /*************************************************************************
  3. 文件名: interrupt INT2()
  4. 日期:       2007年02月8日
  5. 公司(作者):  
  6. 描述和说明: CPU核级中断2(INT2)主服务程序
  7. *************************************************************************/
  8. ioport unsigned port0002; // 定义I/O口地址变量
  9. // 由于I/O空间只有一个设备AD7862
  10. // 所以AD7862地址可任意设,现设为0x0002
  11. #define AD7862_CS  port0002 // 定义字符标识AD7862_CS等于I/O口地址0x0002 
  12. extern unsigned int count_flag;
  13. extern unsigned int t1_count; // 全局变量,用于定时器中断计数
  14. signed int AD7862_U; // 存12位AD转换结果,后变为16位数
  15. signed int U_data_in[640]; // 40个周波AD采样数据缓冲区,为16位2的补码
  16. //signed int U_data_out[320];
  17. void interrupt INT2()
  18. {
  19. switch(PIVR) // 由外设中断向量寄存器PIVR判断
  20.     { // 由哪个片内外设事件引起的中断
  21.       case 0x0027:          // 定时器1的0.625ms周期中断
  22.   // 中断向量为0x0027
  23.    T1CNT=0x00; // 定时器1的计数器重新赋0
  24.        EVAIFRA=EVAIFRA&0x0080; // 清除定时器1周期中断标志,
  25.          // 否则以后的中断将被忽略
  26.    //asm(" CLRC INTM"); // 允许总中断  进入中断后省缺是关中断
  27.            AD7862_U=AD7862_CS; // 读通道VA1转换结果,12位2的补码
  28.    AD7862_U=AD7862_U & 0x0fff; // 12位2的补码转变为16位2的补码
  29.    if (AD7862_U & 0x0800) //负数,补码扩展符号位
  30.    {
  31.     AD7862_U = AD7862_U | 0xf000;
  32.    }
  33.   
  34.    U_data_in[t1_count]=AD7862_U; // 存入AD采样数据缓冲区
  35. //  U_data_in[t1_count]= 2;
  36.  
  37.    
  38.    
  39. if(PCDATDIR == 0xffff)
  40. {
  41. PCDATDIR = 0xff00;
  42. }
  43.    else
  44.    {
  45.     PCDATDIR = 0xffff;
  46.    }
  47. /* U_data_out[t1_count]=AD7862_CS;
  48.    if (U_data_out[t1_count] & 0x0800)
  49.    {
  50.      U_data_out[t1_count]=U_data_out[t1_count]| 0xf000;
  51.    }*/
  52.        
  53.     /*AD7862_U=AD7862_CS; // 读AD通道VA2转换结果
  54. if (AD7862_U & 0x0800) //负数,补码扩展符号位
  55.    {
  56.     AD7862_U = AD7862_U | 0xf000;
  57.    }
  58. U_data_out[t1_count] = AD7862_U;*/
  59.    t1_count++; // 定时器1中断次数加1
  60.      if(t1_count==640) 
  61.      {
  62.         t1_count=0;  // 采40个周波后,计数复位,重新开始
  63.   count_flag =1;
  64.      }
  65.    
  66.            PFDATDIR = PFDATDIR&0xFFEF; // IOPF4输出低电平,为下次再次输出高电平作准备
  67.            PFDATDIR = PFDATDIR|0x1010;    // 为再次启动AD,输出高电平 (IOPF4) CONVST=1,
  68.             // 形成启动AD所需的上升沿
  69.            //asm(" CLRC INTM"); // 允许总中断
  70.        break; // 返回
  71.   
  72.      
  73.      default: // 其它结果
  74.        break;          // 返回
  75. }
  76. }