int wait_int(int flag) { rt_uint32_t ev; if(flag) { /*wait for gdo0 to h */ #if 1 if( rt_event_recv( &cc1101_event, GDO0_H, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 100, &ev ) != RT_EOK ) { rt_kprintf("wait for h failed\r\n"); cc1101_hw_init(); return RT_FALSE; } #else while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==RESET); #endif } else { /*wait for gdo0 to l */ #if 1 if( rt_event_recv( &cc1101_event, GDO0_L, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 100, &ev ) != RT_EOK ) { rt_kprintf("wait for l failed\r\n"); cc1101_hw_init(); return RT_FALSE; } #else while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==SET); #endif } return RT_TRUE; }
int cc1101_init() { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; rt_bool_t status = RT_FALSE; rt_event_init(&cc1101_event, "cc1101_event", RT_IPC_FLAG_FIFO ); spi_init(); cc1101_hw_init(); /* cc1101 int init * */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_Init(GPIOC, &GPIO_InitStructure); #if HW GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource4); /* Configure the SPI interrupt priority */ NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line4; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Clear DM9000A EXTI line pending bit */ EXTI_ClearITPendingBit(EXTI_Line4); #endif return RT_TRUE; }
void app() { APP app; CC1101 cc1101; IPC ipc; app_init(&app); cc1101_hw_init(&cc1101); for (;;) { ipc_read(&ipc); switch (HAL_GROUP(ipc.cmd)) { default: error(ERROR_NOT_SUPPORTED); break; } ipc_write(&ipc); } }