コード例 #1
0
ファイル: qifa.c プロジェクト: httpftpli/appdriver
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;
}
コード例 #2
0
ファイル: keyled.c プロジェクト: httpftpli/key
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);
                }
            }
        }
    }
}
コード例 #3
0
ファイル: temperature.c プロジェクト: layeka/sw_stm_can
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));
}
コード例 #4
0
ファイル: qifa.c プロジェクト: httpftpli/appdriver
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;
}