F28335_ECAP使用

項目要求對工頻電壓進行過零檢測,而爲了防止出現誤差,應該檢測兩次過零點的時間間隔是不是大於一定值,因此需要測量兩次捕捉的相對時間。

進行兩次檢測,第一次檢測到信號就復位計數器,第二次檢測到的結果就是需要的相對時間,可直接使用。

	IER |= M_INT4;
	
   // Initialize eCAP1/2/3
	InitECap1Gpio();
   
	ECap1Regs.ECEINT.all = 0x0000;             // Disable all capture interrupts
	ECap1Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags
	ECap1Regs.ECCTL1.bit.CAPLDEN = 0;          // Disable CAP1-CAP4 register loads
	ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;        // Make sure the counter is stopped

	// Configure peripheral registers
	ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1;      // continue
	ECap1Regs.ECCTL2.bit.STOP_WRAP = 1;        // Stop at 2 events
	ECap1Regs.ECCTL1.bit.CAP1POL = 0;          // Rising edge
	ECap1Regs.ECCTL1.bit.CAP2POL = 0;          // Rising edge
	
	ECap1Regs.ECCTL1.bit.CTRRST1 = 1;          // Difference operation 
	ECap1Regs.ECCTL1.bit.CTRRST1 = 0; 		//第一次捕獲,復位計數器,
       										//第二次得到的值就是需要的時間
	ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;         // Enable sync in
	ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0x10;        // Pass through
	ECap1Regs.ECCTL1.bit.CAPLDEN = 1;          // Enable capture units
	
	ECap1Regs.ECCTL2.bit.REARM = 1;

	ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;        // Start Counter
	ECap1Regs.ECCTL1.bit.CAPLDEN = 1;          // Enable CAP1-CAP4 register loads
	ECap1Regs.ECEINT.bit.CEVT2 = 1;            // 1 events = interrupt
	// Enable eCAP INTn in the PIE: Group 3 interrupt 1

	PieCtrlRegs.PIEIER4.bit.INTx1 = 1;


每個CAP模塊都有一個PIE中斷,而CAP模塊中又有7個觸發源能夠觸發此中斷,因而在相應的中斷函數中,要進行識別,或者限制的處理

 

每次CAP模塊捕獲wrap的次數後,對應的引腳則被凍結,停止捕獲,而ECap1Regs.ECCTL2.bit.REARM = 1;則能解除凍結,同時返回到cap1

因此在中斷函數中應該加入

  ECap1Regs.ECCLR.bit.CEVT2 = 1;
  ECap1Regs.ECCLR.bit.INT = 1;
  ECap1Regs.ECCTL2.bit.REARM = 1;//	用於重新啓動CAP




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章