bool qifaInit(TCHAR *path) { if (__qifainit(&qifaSys, path) == false) { return false; } memset(qifaSys.QiFa_Reg_Table, 0, sizeof qifaSys.QiFa_Reg_Table); for (uint32 i = 0; i < lenthof(qifaSys.QiFa_Reg); i++) { if (qifaSys.QiFa_Reg[i] == NULL || qifaSys.QiFa_Reg[i]->flag != QIFA_FLAG) { continue; } uint32 board = qifaSys.QiFa_Reg[i]->board_id; uint32 iqifa = qifaSys.QiFa_Reg[i]->xuhao; if (board >= qifaSys.numofboard || iqifa >= qifaSys.numperboard) { return false; } qifaSys.QiFa_Reg_Table[board][iqifa] = qifaSys.QiFa_Reg[i]; } ringBufInit(&qifaringbuf, qifavalbuf, sizeof(QIFA_VAL), lenthof(qifavalbuf), 1); #if QIFA_USE_MAILBOX==1 mailboxInit(MODULE_ID_MB); uint32 mbaddr = modulelist[MODULE_ID_MB].baseAddr; MBenableNewMsgInt(mbaddr, 0, 0); mbRegistHandler(0, qifa_mailbox_handler); #endif ////////////////////////////////////// return true; }
void keyLedProcess() { everydiffdo(unsigned int, ledkeytimermark, timerTick1ms) { for (int i = 0; i < lenthof(led); i++) { switch(led[i].func) { case ONOFF: if (led[i].on && led[i].ontime != 0xffff && led[i].ontimeval++ >= led[i].ontime) { led[i].on = false; led[i].ontimeval = 0; led[i].stat = 1; led[i].func = 0; ledstat = 1; } break; case BLINKON: if (led[i].ontimeval++ >= led[i].ontime) { led[i].ontimeval = 0; led[i].on = false; led[i].stat = 1; led[i].func = BLINKOFF; ledstat = 1; } break; case BLINKOFF: if (led[i].offtimeval++ >= led[i].offtime) { led[i].offtimeval = 0; led[i].on = true; led[i].func = BLINKON; led[i].stat = 1; ledstat = 1; } break; default: break; } } if (ledstat == 1) { ledstat = 0; for (int i = 0; i < 16; i++) { if(led[i].stat == 1){ led[i].stat = 0; if (led[i].on == true) { ledbitmap &= ~(unsigned short)(1 << i); } else { ledbitmap |= (unsigned short)(1 << i); } keyLedSet(ledbitmap); } } } } }
void temperaInit(void){ //clock /* Enable GPIOA clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); /* ADC1 Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* DMA1 clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE); NVIC_InitTypeDef NVIC_InitStructure; /* NVIC configuration */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //io /* Configure PA.02 as analog input */ GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStruct); /* DMA1 Channel1 Config */ DMA_InitTypeDef DMA_InitStruct; DMA_DeInit(DMA1_Channel1); DMA_InitStruct.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)&adcbuf; DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStruct.DMA_BufferSize = lenthof(adcbuf); DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; DMA_InitStruct.DMA_Priority = DMA_Priority_High; DMA_InitStruct.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStruct); DMA_ITConfig(DMA1_Channel1, DMA_IT_TC,ENABLE); DMA_Cmd(DMA1_Channel1, ENABLE); //ADC ADC_DeInit(ADC1); ADC_InitTypeDef ADC_InitStruct; ADC_StructInit(&ADC_InitStruct); ADC_InitStruct.ADC_Resolution = ADC_Resolution_10b; ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStruct.ADC_ScanDirection = ADC_ScanDirection_Backward; ADC_Init(ADC1, &ADC_InitStruct); ADC_ChannelConfig(ADC1, ADC_Channel_2 , ADC_SampleTime_239_5Cycles); /* ADC DMA request in circular mode */ ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular); /* Enable ADC_DMA */ ADC_DMACmd(ADC1, ENABLE); ADC_GetCalibrationFactor(ADC1); ADC_ClockModeConfig(ADC1, ADC_ClockMode_SynClkDiv4); //start adc ADC_Cmd(ADC1, ENABLE); while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN)); }
static bool __qifainit(QIFA_SYS *qifasys, TCHAR *path) { static wchar __qifaname[20000]; static QIFA __QiFa_Reg[160]; for (int i = 0; i < lenthof(__QiFa_Reg); i++) { __QiFa_Reg[i].flag = 0; } MEM_ERR mem_err; if (!(qifasys->flag & 0x01)) { MemCreate(&qifamem, "qifa mem pool", __QiFa_Reg, lenthof(__QiFa_Reg), sizeof(QIFA), &mem_err); ASSERT(mem_err == MEM_ERR_NONE); qifasys->flag |= 0x01; } else { for (int i = 0; i < lenthof(qifasys->QiFa_Reg); i++) { if (qifasys->QiFa_Reg[i] != NULL) { uint32 iboard = qifasys->QiFa_Reg[i]->board_id; uint32 iqf = qifasys->QiFa_Reg[i]->xuhao; qifasys->QiFa_Reg_Table[iboard][iqf] = NULL; memset(qifasys->QiFa_Reg[i], 0, sizeof(QIFA)); MemPut(&qifamem, qifasys->QiFa_Reg[i], &mem_err); ASSERT(mem_err == MEM_ERR_NONE); qifasys->QiFa_Reg[i] = NULL; } } } FIL file; uint32 rb; //int nameoffset; MD5_CTX md5; MACHI_CFG_FILE_HEAD *filehead; QIFA_INFO *info; QF_PACKED *qifapack; unsigned char *p, *data = NULL; unsigned char md5hash[16]; if (f_open(&file, path, FA_READ) != FR_OK) { return false; } unsigned int filesize = f_size(&file); data = (unsigned char *)malloc(filesize); if (data == NULL) { goto ERROR; } if (f_read(&file, data, filesize, &rb) != FR_OK || rb != filesize) { goto ERROR; } filehead = (MACHI_CFG_FILE_HEAD *)data; if (strcmp(filehead->cfghead, "swjcfg") != 0) goto ERROR; MD5Init(&md5); MD5Update(&md5, data + 24, filesize - 24); MD5Final(&md5, md5hash); if (memcmp(&md5hash, filehead->md5, 16) != 0) goto ERROR; p = data + filehead->sec[0].offset; info = (QIFA_INFO *)p; if (sizeof *qifapack != info->sizeofQifa) { goto ERROR; } qifasys->numofboard = info->numofQfBoard; qifasys->numperboard = info->numperQfBoard; qifasys->numofqifa = info->numofQifa; ASSERT(qifasys->numofboard <= lenthof(qifasys->QiFa_Reg_Table)); ASSERT(qifasys->numperboard <= lenthof(qifasys->QiFa_Reg_Table[0])); p += info->qifanameOffset; memcpy(__qifaname, p, info->qifanamesize); p = data + filehead->sec[0].offset + info->qifaOffset; for (int i = 0; i < qifasys->numofqifa; i++) { qifapack = (QF_PACKED *)p; p += sizeof(QF_PACKED); if (qifapack->flag != QIFA_FLAG_EN && qifapack->flag != QIFA_FLAG_DIS) { goto ERROR; } if (qifapack->flag == QIFA_FLAG_DIS) { continue; } QIFA *qifa = MemGet(&qifamem, &mem_err); ASSERT(mem_err == MEM_ERR_NONE); uint16 qfid = qifapack->qfId; qifa->board_id = qifapack->board_id; qifa->xuhao = qifapack->xuhao; qifa->nc_no = qifapack->default_nc_no; qifa->default_nc_no = qifapack->default_nc_no; qifa->nc_no_changeable = qifapack->nc_no_changeable; qifa->nc_no_display = qifapack->nc_no_dis; qifa->cam_en = qifapack->iscam; qifa->flag = QIFA_FLAG; qifa->qfid = qfid; for (int j = 0; j < 13; j++) { if (qifapack->qifa_name_offset[j] != -1UL) { qifa->name[j] = &__qifaname[qifapack->qifa_name_offset[j] / 2]; } else { qifa->name[j] = &__qifaname[qifapack->qifa_name_offset[0] / 2]; } } char nicknamebuf[100]; wtrToStr(nicknamebuf, qifa->name[0]); strtok(nicknamebuf, "["); char *p = strtok(nicknamebuf, "]"); strcpy(qifa->nickname, p + 1); qifasys->QiFa_Reg[qfid] = qifa; } f_close(&file); if (data != NULL) { free(data); } return true; ERROR: f_close(&file); if (data != NULL) { free(data); } return false; }