bool is_school_zone_detected() { char buf[10]; bool ret_val = false; DisableExternalInterrupts(); int a1 = A2D_GetSingleCh_10bit(PIN_IR_SENSOR_1_ADC); int a3 = A2D_GetSingleCh_10bit(PIN_IR_SENSOR_3_ADC); int a5 = A2D_GetSingleCh_10bit(PIN_IR_SENSOR_5_ADC); if(a1 < ADC_BLACK_REFERENCE) { if(a5 < ADC_BLACK_REFERENCE) { if(a3 < ADC_BLACK_REFERENCE) { ret_val = true; } } } EnableExternalInterrupts(); return ret_val; }
//- Tx Queue에 Ch 넣음. 단, Tx Queue가 차 있으면 빌 때까지 기다림 void SDBG_PutCh(char ch) { vint32_t cnt=0; while (SDBG_IsTxQueFull()) { if (++cnt>30000) break; } if (ch == SDBG_ASCII_LF) SDBG_PutCh(SDBG_ASCII_CR); DisableExternalInterrupts(); if (LINFLEX_0.LINIER.B.DTIE == 0) { LINFLEX_0.UARTSR.R = 0x2; // DTF LINFLEX_0.LINIER.B.DTIE = 1; LINFLEX_0.BDRL.R = ch; LINFLEX_0.LINSR.R = 0xF23F; } else { sdbg_TxQue[sdbg_TxQueHeadPtr] = ch; sdbg_TxQueHeadPtr = (sdbg_TxQueHeadPtr+1)%SDBG_TX_QUE_SIZE; } EnableExternalInterrupts(); }
//- Tx Queue에 Ch 넣음. 단, Tx Queue가 차 있으면 빌 때까지 기다림 void YUART_PutCh(char ch) { vint32_t cnt=0; while (YUART_IsTxQueFull()) { if (++cnt>30000) break; } if (ch == YUART_ASCII_LF) YUART_PutCh(YUART_ASCII_CR); DisableExternalInterrupts(); if (LINFLEX_2.LINIER.B.DTIE == 0) { LINFLEX_2.UARTSR.R = 0x2; // DTF LINFLEX_2.LINIER.B.DTIE = 1; LINFLEX_2.BDRL.R = ch; LINFLEX_2.LINSR.R = 0xF23F; } else { yuart_TxQue[yuart_TxQueHeadPtr] = ch; yuart_TxQueHeadPtr = (yuart_TxQueHeadPtr+1)%YUART_TX_QUE_SIZE; } EnableExternalInterrupts(); }
//- Tx Queue가 다 차면 NGV_DMU_TRUE 리턴, 그렇지 않으면 NGV_DMU_FALSE 리턴 int16_t SDBG_IsTxQueFull(void) { int16_t size; DisableExternalInterrupts(); size = (sdbg_TxQueHeadPtr-sdbg_TxQueTailPtr+SDBG_TX_QUE_SIZE)%SDBG_TX_QUE_SIZE; EnableExternalInterrupts(); if (size>=(SDBG_TX_QUE_SIZE-2)) { return NGV_DMU_TRUE; } return NGV_DMU_FALSE; }
//- Tx Queue가 다 차면 NGV_DMU_TRUE 리턴, 그렇지 않으면 NGV_DMU_FALSE 리턴 int16_t YUART_IsTxQueFull(void) { int16_t size; DisableExternalInterrupts(); size = (yuart_TxQueHeadPtr-yuart_TxQueTailPtr+YUART_TX_QUE_SIZE)%YUART_TX_QUE_SIZE; EnableExternalInterrupts(); if (size>=(YUART_TX_QUE_SIZE-2)) { return NGV_DMU_TRUE; } return NGV_DMU_FALSE; }
void InitPeripherals(void) { sys_init_fnc(); DLED_Init(); DSW_Init(); BTMR_Init(); SDBG_Init(); MUART_Init(); YUART_Init(); CLCD_Init(); FADC_Init(0xfff3); EnableExternalInterrupts(); }
int main(void) { volatile int i = 0; sys_init_fnc(); INIT_33905(); EnableExternalInterrupts(); AFS_Set_LIN_Interface(LIN_TX, LIN_RX); /* Loop forever */ for (;;) { i++; Delay_ms(500); LED1 = ~LED1; AFS_AFL_Init_Test(); } }
void main(void) { uint32_t i, j; //- sys_init_fnc() 함수에서 시스템을(레지스터를) 초기화함 sys_init_fnc(); EnableExternalInterrupts(); //- 회로도를 보면, // LED1: PE4(68번), LED2: PE5(69번), LED3: PE6(70번), LED4: PE7(71번) // LED가 모두 High 출력일 때, OFF, Low 출력일 때, ON임 // //- PE4, PE5, PE6, PE7을 GPIO의 출력으로 초기 설정하는 것은 // siu_init.c의 siu_init_fnc() 함수가 담당 // siu_portE_init_fnc()에 보면, SIU.PCR[68].R = 0x0201; //- 일단, LED 모두 OFF // 참고: 레지스터에 액세스에 대한 Macro 상수 선언은 jdp.h에 있음 SIU.GPDO[68].B.PDO = 1; // 1이면 High 출력, 0이면 Low 출력 SIU.GPDO[69].B.PDO = 1; SIU.GPDO[70].B.PDO = 1; SIU.GPDO[71].B.PDO = 1; //- LED1부터 0.5초 ON, 0.5초 OFF를 10회 반복 while(1) { for (i=68; i<=71; i++) { for (j=0; j<10; j++) { SIU.GPDO[i].B.PDO = 0; delay_ms(500); SIU.GPDO[i].B.PDO = 1; delay_ms(500); } } } }