⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp_dali.c

📁 嵌入式的tcpip协议栈
💻 C
字号:
#include <includes.h>

  CPU_INT08U      period = 0; /* ca.*/
  CPU_INT08U      counter = 0; /* ca.*/
  CPU_INT08U      start = 0;
  CPU_INT08U      stop = 0;
   CPU_INT08U      dali_bitX;
/******************************************************************************/
void   T2_IRQ_Handler (void)   /*void Timer0Handler (void) __irq */
{
   
/********* Dali Driver code **********************************************/
  if(start == 0)
     //FIO2SET = DEF_BIT_30;  
     IO0SET = DEF_BIT_21; // pin p0.21 test on
         else
	 {
	   if (stop == 0x01) //Dali stop bit
	    {
	    //FIO2SET = DEF_BIT_30;
	    IO0SET = DEF_BIT_21; // pin p0.21 test on
            counter ++;
		}
		else //Not at the end of the dali frame  
		{ 
	       if (period == 0)   // T1  
	         if (dali_bitX == 1)
	 	     {
       	             //FIO2CLR = DEF_BIT_30; 
	   	     IO0CLR = DEF_BIT_21; // for T1 of a 1 bit go low
                     period = 1;
		     }
		     else
			 {
			   if (dali_bitX == 0)
		       {
		       //FIO2SET = DEF_BIT_30;
		       IO0SET = DEF_BIT_21; // for T1 of a 0 bit go high
                       period = 1;
		       }
			 }
	       else 
	       if (period == 1)
	 	      if (dali_bitX == 1)
	 	      {
      	              //FIO2SET = DEF_BIT_30;
	   	      IO0SET = DEF_BIT_21; // for T2 of a 1 bit go high
                      period = 0;
		      counter ++;
		      }
		      else if(dali_bitX == 0)
		      {
		      //FIO2CLR = DEF_BIT_30; 
		      IO0CLR = DEF_BIT_21; // for T2 of a 1 bit go low
                      period = 0;
		      counter ++;
		      }
	     }
	  }   

    T2IR = 0x01;              // reset Timer2 interrupt flag
    VICAddress    =  0;       /* Dummy write to clear VIC interrupt. */
    
    
}
void  Dali_Timer_Init(void)   
{
 
 
// config DALI output pin  
    CPU_INT32U  pinsel;
    pinsel   = PINSEL1;
    pinsel  &= 0xFFFFFCFF;            /* PINSEL1[11:10] = 0 for GPIO mode P0.21 */
    PINSEL1  = pinsel;
    IO0DIR |= DEF_BIT_21;            /* set P0.21 as a output */
    
 
    
    
// Initialize the Timer2 interrupt
    PCONP |= DEF_BIT_22; 	  // Turn on Power to Timer2
    VICIntSelect &= ~(1<< VIC_TIMER2); // Set Timer2 as standard IRQ (not FIQ)
    VICVectAddr26  = (CPU_INT32U)T2_IRQ_Handler;           /* Set the vector address. */
    VICVectPriority26  = 15;          /* Set the vector priority for Timer2       */
    VICIntEnable = (1<< VIC_TIMER2); // Enable the Timer2 interrupt

    T2MR0 = 5004;// for 208us int.    ca.    // Match0 = 10 msec / 16,67 nsec (1/60MHz)
    T2MCR = 3;                     // Interrupt on Match0, reset timer on match
                                   // Pclk = 60 MHz
                                   // timer count = 16,67 nsec (1/60MHz)
    T2CTCR = 0;                    // Timer mode
    T2TC  = 0;                     // reset Timer counter to zero
    T2PR  = 0;                     // Prescaler =0, increment on every PCLK
    T2CCR = 0;                     /* Capture is disabled.                                 */
    T2EMR = 0;                     /* No external match output.                            */
    T2TCR = 1;                     // enable Timer
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -