Interrupt.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. #define __INTERRUPT_DEF
  2. #include "ABIS_User.h"
  3. unsigned char g_ucENABLE = 1;
  4. unsigned int uiData_num = 0,uiData_buffer = 0;
  5. /*******************************************************************************
  6. * 函数名称:Init_T3
  7. *******************************************************************************/
  8. //void Init_T3(){
  9. // TMR3 = 0;
  10. // PR3 = 9375;
  11. // T3CON = 0x8020; // T6=1:64
  12. //
  13. // IFS0bits.T3IF = 0;
  14. // IPC2bits.T3IP = 4;
  15. // IEC0bits.T3IE = 1;
  16. // T3CONbits.TON = 1;
  17. //
  18. //}
  19. //void __attribute__((__interrupt__,auto_psv)) _T3Interrupt (void)
  20. //{
  21. // if(DmaBuffer == 0)
  22. // {
  23. // BufferA.Adc1Ch0[0] = AD_Get(0x00);
  24. // BufferA.Adc1Ch1[0] = AD_Get(0x01);
  25. // BufferA.Adc1Ch2[0] = AD_Get(0x02);
  26. // BufferA.Adc1Ch3[0] = AD_Get(0x03);
  27. // BufferA.Adc1Ch4[0] = AD_Get(0x04);
  28. // BufferA.Adc1Ch5[0] = AD_Get(0x05);
  29. // BufferA.Adc1Ch6[0] = AD_Get(0x06);
  30. // BufferA.Adc1Ch7[0] = AD_Get(0x07);
  31. // BufferA.Adc1Ch8[0] = AD_Get(0x08);
  32. // }
  33. // else
  34. // {
  35. // BufferB.Adc1Ch0[0] = AD_Get(0x00);
  36. // BufferB.Adc1Ch1[0] = AD_Get(0x01);
  37. // BufferB.Adc1Ch2[0] = AD_Get(0x02);
  38. // BufferB.Adc1Ch3[0] = AD_Get(0x03);
  39. // BufferB.Adc1Ch4[0] = AD_Get(0x04);
  40. // BufferB.Adc1Ch5[0] = AD_Get(0x05);
  41. // BufferB.Adc1Ch6[0] = AD_Get(0x06);
  42. // BufferB.Adc1Ch7[0] = AD_Get(0x07);
  43. // BufferB.Adc1Ch8[0] = AD_Get(0x08);
  44. // }
  45. // DmaBuffer ^= 1;
  46. // IFS0bits.T3IF = 0;
  47. //}
  48. /*******************************************************************************
  49. * 函数名称:T1Interrupt
  50. *******************************************************************************/
  51. void __attribute__((__interrupt__,auto_psv)) _T2Interrupt (void)
  52. {
  53. IFS0bits.T2IF = 0;
  54. T6CONbits.TON = 0; //修改为0
  55. TMR2 = 0;
  56. g_tMotorParam.ulXiPosition =( g_tMotorParam.ucXDirection == FORWARD )? (g_tMotorParam.ulXiPosition + 1) : (g_tMotorParam.ulXiPosition - 1);
  57. if(MOTORX_DIR_scan == 1){
  58. g_uiScanPulseX++;//记录当前脉冲值
  59. }else if(MOTORX_DIR_scan == 0){
  60. g_uiScanPulseX--;//记录当前脉冲值
  61. }else{}
  62. if(Alldata == 1){
  63. if(ADC7606Enable==1) {
  64. if (g_ucFAMLED == 1) {
  65. if ((g_uiScanPulseX >= (g_uiScanFAM[0] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[0] + SUM))) {
  66. FAMLED = 1;
  67. FAMData[0][FAMData_num] = AD_Get(0x09);
  68. FAMData_num++;
  69. } else if ((g_uiScanPulseX >= (g_uiScanFAM[1] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[1] + SUM))) {
  70. FAMLED = 1;
  71. FAMData[1][FAMData_num] = AD_Get(0x09);
  72. FAMData_num++;
  73. } else if ((g_uiScanPulseX >= (g_uiScanFAM[2] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[2] + SUM))) {
  74. FAMLED = 1;
  75. FAMData[2][FAMData_num] = AD_Get(0x09);
  76. FAMData_num++;
  77. } else if ((g_uiScanPulseX >= (g_uiScanFAM[3] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[3] + SUM))) {
  78. FAMLED = 1;
  79. FAMData[3][FAMData_num] = AD_Get(0x09);
  80. FAMData_num++;
  81. } else if ((g_uiScanPulseX >= (g_uiScanFAM[4] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[4] + SUM))) {
  82. FAMLED = 1;
  83. FAMData[4][FAMData_num] = AD_Get(0x09);
  84. FAMData_num++;
  85. } else if ((g_uiScanPulseX >= (g_uiScanFAM[5] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[5] + SUM))) {
  86. FAMLED = 1;
  87. FAMData[5][FAMData_num] = AD_Get(0x09);
  88. FAMData_num++;
  89. } else if ((g_uiScanPulseX >= (g_uiScanFAM[6] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[6] + SUM))) {
  90. FAMLED = 1;
  91. FAMData[6][FAMData_num] = AD_Get(0x09);
  92. FAMData_num++;
  93. } else if ((g_uiScanPulseX >= (g_uiScanFAM[7] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[7] + SUM))) {
  94. FAMLED = 1;
  95. FAMData[7][FAMData_num] = AD_Get(0x09);
  96. FAMData_num++;
  97. } else if ((g_uiScanPulseX >= (g_uiScanFAM[8] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[8] + SUM))) {
  98. FAMLED = 1;
  99. FAMData[8][FAMData_num] = AD_Get(0x09);
  100. FAMData_num++;
  101. } else if ((g_uiScanPulseX >= (g_uiScanFAM[9] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[9] + SUM))) {
  102. FAMLED = 1;
  103. FAMData[9][FAMData_num] = AD_Get(0x09);
  104. FAMData_num++;
  105. } else if ((g_uiScanPulseX >= (g_uiScanFAM[10] - SUM)) &&(g_uiScanPulseX < (g_uiScanFAM[10] + SUM))) {
  106. FAMLED = 1;
  107. FAMData[10][FAMData_num] = AD_Get(0x09);
  108. FAMData_num++;
  109. } else if ((g_uiScanPulseX >= (g_uiScanFAM[11] - SUM)) &&(g_uiScanPulseX < (g_uiScanFAM[11] + SUM))) {
  110. FAMLED = 1;
  111. FAMData[11][FAMData_num] = AD_Get(0x09);
  112. FAMData_num++;
  113. } else if ((g_uiScanPulseX >= (g_uiScanFAM[12] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[12] + SUM))) {
  114. FAMLED = 1;
  115. FAMData[12][FAMData_num] = AD_Get(0x09);
  116. FAMData_num++;
  117. }else if ((g_uiScanPulseX >= (g_uiScanFAM[13] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[13] + SUM))) {
  118. FAMLED = 1;
  119. FAMData[13][FAMData_num] = AD_Get(0x09);
  120. FAMData_num++;
  121. }else if ((g_uiScanPulseX >= (g_uiScanFAM[14] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[14] + SUM))) {
  122. FAMLED = 1;
  123. FAMData[14][FAMData_num] = AD_Get(0x09);
  124. FAMData_num++;
  125. }else if ((g_uiScanPulseX >= (g_uiScanFAM[15] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[15] + SUM))) {
  126. FAMLED = 1;
  127. FAMData[15][FAMData_num] = AD_Get(0x09);
  128. FAMData_num++;
  129. }else if ((g_uiScanPulseX >= (g_uiScanFAM[16] - SUM))&&(g_uiScanPulseX < (g_uiScanFAM[16] + SUM))) {
  130. FAMLED = 1;
  131. FAMData[16][FAMData_num] = AD_Get(0x09);
  132. FAMData_num++;
  133. } else {
  134. FAMLED = 0;
  135. FAMData_num = 0;
  136. }
  137. }
  138. }
  139. }
  140. else if(Alldata == 0){//获取全数据用
  141. if(Motstep == 10){
  142. Motstep = 0;
  143. if(MPPCnum == 0)
  144. ucBuffer_Data[FAMData_num] = AD_Get(0x09);
  145. else if(MPPCnum == 1)
  146. ucBuffer_Data[FAMData_num] = AD_Get(0x0B);
  147. else if(MPPCnum == 2)
  148. ucBuffer_Data[FAMData_num] = AD_Get(0x0A);
  149. else if(MPPCnum == 3)
  150. ucBuffer_Data[FAMData_num] = AD_Get(0x0C);
  151. FAMData_num++;
  152. }
  153. Motstep++;
  154. }
  155. else{};
  156. PR2 = g_uiMotorXPeriod[g_uiAccIndex];
  157. OC1RS = g_uiMotorXPeriod[g_uiAccIndex]/2;
  158. OC1R = 0;
  159. g_uliRunningPulse++;
  160. if(g_uliRunningPulse <= g_tMotorParam.ulXiAccPulse){
  161. g_uiAccIndex++;
  162. }
  163. else if(g_uliRunningPulse < g_tMotorParam.ulXiConstPulse){ //匀速运动,频率不变
  164. //g_uliRunningPulse--;
  165. }
  166. else if(g_uliRunningPulse < g_uliPulseCount){ //减速运动,频率减小
  167. g_uiAccIndex--;
  168. }
  169. else if(g_uliRunningPulse >= g_uliPulseCount){ //停止PWM输出
  170. TMR2 = 0;
  171. T2CONbits.TON = 0; //off the T1
  172. g_ucMotorXFinishFlag=1;
  173. ADC7606Enable =0;
  174. }
  175. T6CONbits.TON = 1; //修改为0
  176. }
  177. /*******************************************************************************
  178. * 函数名称:Init_T6
  179. *******************************************************************************/
  180. void Init_T6()
  181. {
  182. TMR6 = 0;
  183. PR6 = 11719;
  184. T6CON = 0x8030;
  185. IFS2bits.T6IF = 0;
  186. IPC11bits.T6IP = 2;
  187. IEC2bits.T6IE = 1;
  188. T6CONbits.TON = 1;
  189. }
  190. void __attribute__((interrupt,auto_psv)) _T6Interrupt (void)
  191. {
  192. IFS2bits.T6IF = 0;
  193. static unsigned char Timer ;
  194. Timer++;
  195. if(Timer == 20){
  196. Timer = 0;
  197. STU1 = !STU1;
  198. }
  199. // 待测试标定对应顺序 测试OK
  200. MCUAdcBuff[0][SampleNo] = AD_Get(0x05); //BLOCK1
  201. MCUAdcBuff[1][SampleNo] = AD_Get(0x04); //BLOCK2
  202. MCUAdcBuff[2][SampleNo] = AD_Get(0x03); //BLOCK3
  203. MCUAdcBuff[3][SampleNo] = AD_Get(0x02); //BLOCK4
  204. MCUAdcBuff[4][SampleNo] = AD_Get(0x06); //BLOCK5制冷池
  205. MCUAdcBuff[5][SampleNo] = AD_Get(0x07); //BLOCK6制冷池
  206. MCUAdcBuff[6][SampleNo] = AD_Get(0x0f); //热盖
  207. // MCUAdcBuff[7][SampleNo] = AD_Get(0x07); //
  208. // MCUAdcBuff[8][SampleNo] = AD_Get(0x08); // 散热片
  209. SampleNo++;
  210. if(SampleNo > 2) { //100ms
  211. SampleNo=0;
  212. T4CONbits.TON=1; //off the T4 for 1ms
  213. ms100conter++;
  214. if(ms100conter%100 == 0){
  215. s10flag = 1;
  216. }
  217. }
  218. }
  219. /*******************************************************************************
  220. * 函数名称:Init_T4
  221. *******************************************************************************/
  222. void Init_T4()
  223. {
  224. TMR4 = 0;
  225. PR4 = 9375;
  226. T4CON = 0x8020; // T4=1:64
  227. IFS1bits.T4IF = 0;
  228. IPC6bits.T4IP = 2; //值越高优先级越高
  229. IEC1bits.T4IE = 1; //使能中断
  230. T4CONbits.TON = 0;
  231. }
  232. void __attribute__((interrupt,auto_psv)) _T4Interrupt (void)
  233. {
  234. unsigned char i;
  235. unsigned char j;
  236. long TempAD;
  237. // STU2 = ~STU2;
  238. IFS1bits.T4IF = 0;
  239. T4CONbits.TON = 0;//off the T4 for 1ms
  240. for(i=0;i<9;i++){
  241. TempAD=0;
  242. for(j=0;j<3;j++){
  243. TempAD += MCUAdcBuff[i][j];
  244. }
  245. dTemperature[i]=TempAD/3;
  246. dTemperatureAD[i] = (unsigned int)dTemperature[i];
  247. }
  248. for(i=0;i<7;i++){
  249. TempChn[i].fCurrentTemperature = (double)(TempPara[i].fK1 * dTemperature[i]*dTemperature[i] + TempPara[i].fK2 * dTemperature[i] + TempPara[i].fB);
  250. if(TempChn[i].fCurrentTemperature > 90) TempChn[i].fCurrentTemperature = (double)(TempChn[i].fCurrentTemperature + TempPara[i].TTb);
  251. }
  252. if(g_ucENABLE == 1){
  253. PeltierCtrler();
  254. }
  255. for(i=6;i<8;i++){
  256. CAPReal_temp[i-6] =(double)(CAPTk[i-6]*dTemperature[i] + CAPTb[i-6]);
  257. CAPReal_temp[i-6] =(double)(CAPTTk[i-6]*CAPReal_temp[i-6] + CAPTTb[i-6]);
  258. }
  259. if((CAPReal_temp[0] > (g_tEE.CAPTarget_temp[0]-3))&&(CAPReal_temp[0] < 121.0 )){//当前热盖温度在规定范围内时系统状态灯常亮
  260. g_ucSTATE_CAP = 1;
  261. }
  262. CAPPeltierCtrler();//热盖温控
  263. g_fFINReal_Temp = (float)(g_tEE.fFINTTk * (g_tEE.fFINTk*dTemperature[8] + g_tEE.fFINTb)+ g_tEE.fFINTTb);
  264. g_ucSampleNo_STU++;
  265. if((g_ucSampleNo_STU >= 3)&&(g_ucSTATE_RUN == 2)){//实验开始,状态灯间隔0.5s闪烁
  266. g_ucSampleNo_STU = 0;
  267. POWER_STU1 = ~POWER_STU1;
  268. FANOC_Set(3,g_tEE.uiFanHPwm);
  269. }
  270. if((g_ucSTATE_RUN == 1)&&(g_ucSTATE_CAP == 1)){//实验结束或空闲,状态灯常亮
  271. g_ucSampleNo_STU = 0;
  272. POWER_STU1 = 1;
  273. FANOC_Set(3,g_tEE.uiFanLPwm);
  274. }
  275. if(g_ucSTATE_CAP == 0){
  276. g_ucSampleNo_STU = 0;
  277. POWER_STU1 = 0;
  278. FANOC_Set(3,g_tEE.uiFanLPwm);
  279. }
  280. }
  281. /*******************************************************************************
  282. * 函数名称:Init_T8
  283. *******************************************************************************/
  284. void Init_T8()
  285. {
  286. TMR8 = 0;
  287. PR8 = 781;
  288. T8CON = 0x8010;
  289. IFS3bits.T8IF = 0;
  290. IPC12bits.T8IP = 7;
  291. IEC3bits.T8IE = 1;
  292. }
  293. void __attribute__((interrupt,auto_psv)) _T8Interrupt (void)
  294. {
  295. IFS3bits.T8IF = 0;
  296. if(MotorXHomebuffer == 1){
  297. MOTORX_PWM = !MOTORX_PWM;
  298. PulseNum++;
  299. }
  300. if(MotorYHomebuffer == 1){
  301. MOTORY_PWM = !MOTORY_PWM;
  302. PulseNum++;
  303. }
  304. }