📄 bsp_dali.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 + -