⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app_ml675050.c

📁 最新版IAR FOR ARM(EWARM)5.11中的代码例子
💻 C
📖 第 1 页 / 共 4 页
字号:
            }
        }
    }
     /* FIQ interrupt */
    while (AP_FIQ_Flag == 0) {
        /* EXINT1 interrupt */
        AP_EXINT1_Flag = 0;
         while ((AP_EXINT1_Flag == 0) && (AP_FIQ_Flag == 0)) {
            ;
        }
        /* read rtc data */
        rtnVal = smpDrv_ioctl(DRVNO_RTC, ML675050_HAL_RTC_READ_DATE, (uint32_t)(&rtc_time), handle_uart);

        if (rtnVal == OK) {
            /* send rtc data to pc by uart */
            rtnVal = smpDrv_write(DRVNO_UART,change_rtc_to_str(output_rtc_time, &rtc_time), 
                                   OUTPUT_RTC_TIME_LEN + 2, handle_uart);
            
       }
    }

    smpDrv_close(DRVNO_INTFIQ, handle_fiq);     /* FIQ Close */
    smpDrv_close(DRVNO_INTEXINT, handle_irq);   /* EXINT1 Close */
    smpDrv_close(DRVNO_RTC, handle_rtc);        /* Close RTC. */
    smpDrv_close(DRVNO_UART, handle_uart);      /* Close UART. */

    /* Execution result */
    if(rtnVal == OK){
        debug_msg(_3_LED_OK, NULL);       /* 3 bit LED : OK */
    }else{
        debug_msg(_3_LED_NG, NULL);       /* 3 bit LED : NG */
    }

    return rtnVal;
}
/************************************************************************/
/*                                                                      */
/*  Function Name   : ML675050smpAP_SPI                                 */
/*  Input           : void                                              */
/*  Output          : int16_t OK(1)                                     */
/*                            ERROR(-1)                                 */
/*                                                                      */
/*  Note : Sample program of spi.                                       */
/*         SPI master: Please set macro "SPI_MASTER" 1.                 */
/*         SPI salve:  Please set macro "SPI_MASTER" 0.                 */
/*                                                                      */
/************************************************************************/
uint8_t  SPI_SendData[SPI_BUFF_SIZE];    /* Send buffer */
uint8_t  SPI_ReceivData[SPI_BUFF_SIZE];  /* Receive buffer */
int16_t ML675050smpAP_SPI(void) {
    int16_t rtnVal = OK;
    int16_t handle_dmac;
    int16_t handle_spi;
    uint8_t i;
    struct ML675050_SpiParam spi_trans_param;
    uPLAT_DmacParam dmac_param;
    smpDrvInitPeripheral init_peripheral;
    int16_t tbyte = SPI_BUFF_SIZE;
    uint32_t rx_size = 0;
    uint32_t error_sta = SPI_NO_ERR;

    /* Initialize peripheral. */
    init_peripheral.init_xbus.rombw = BWC_ROMBW_16;
    init_peripheral.init_xbus.srambw = BWC_SRAMBW_16;
    init_peripheral.init_xbus.iobw = BWC_IOBW_16;

    init_peripheral.init_xbus.romtype = ROMAC_ROMTYPE_0;
    init_peripheral.init_xbus.rombrst = ROMAC_ROMBRST_off;

    init_peripheral.init_xbus.sramtype = RAMAC_RAMTYPE_1;
    init_peripheral.init_xbus.srambrst = RAMAC_RAMBRST_off;

    init_peripheral.init_xbus.iotype = IOAC_IOTYPE_2;

    init_peripheral.init_xbus.sdrambw = DBWC_DBDRAM16;

    init_peripheral.init_xbus.standby = FALSE;

    init_peripheral.cache_mode = CACHE_WRITE_BACK;

    init_peripheral.init_port.port_sel1 = PORT_CR1_INIT_VALUE;
    init_peripheral.init_port.port_sel2 = PORT_CR2_INIT_VALUE;
    init_peripheral.init_port.port_sel3 = PORT_CR3_INIT_VALUE;
    init_peripheral.init_port.port_sel4 = PORT_CR4_INIT_VALUE;
    rtnVal = smpDrv_reset(&init_peripheral);
    if (rtnVal != OK) {
        return rtnVal;
    }

    /* 3 bit LED start. */
    debug_msg(_3_LED_START, "SPI sample application is start.\n");
    /* 7 segment LED1 : OFF */
    debug_msg(_7_LED1_OFF, NULL);

    /* Clear send_receive_buffer and err_status */
    for (i = 0; i < SPI_BUFF_SIZE; i++) {
        SPI_SendData[i] = i;
        SPI_ReceivData[i] = SPI_END_PATTERN;
    }

    /* Initailize DMAC. */
    /* DMAC_A: 0 */
    dmac_param.device = DMAC_A;
    dmac_param.channel[DMAC_A_CHANNEL_0] = DMAC_A_CHANNEL_USED;
    dmac_param.channel[DMAC_A_CHANNEL_1] = DMAC_A_CHANNEL_USED;
    dmac_param.channel[DMAC_A_CHANNEL_2] = DMAC_A_CHANNEL_NOT_USED;
    dmac_param.channel[DMAC_A_CHANNEL_3] = DMAC_A_CHANNEL_NOT_USED;
    /* priority of channel */
    dmac_param.channel_priority = DMAMODA_PRI_APP;
    /* DMA request mode */
    dmac_param.dma_req_mode[DMAC_A_CHANNEL_0] = DMACTMODA0_ARQ_APP;
    dmac_param.dma_req_mode[DMAC_A_CHANNEL_1] = DMACTMODA1_ARQ_APP;
    /* data transmitting size */
    dmac_param.data_size[DMAC_A_CHANNEL_0] = DMACTMODA0_TSIZ_APP;
    dmac_param.data_size[DMAC_A_CHANNEL_1] = DMACTMODA1_TSIZ_APP >> 2;
    /* source address */
    dmac_param.src_address[DMAC_A_CHANNEL_0] = (uint32_t)SPI_SendData;
    dmac_param.src_address[DMAC_A_CHANNEL_1] = SPDRR0;
    /* source device type */
    dmac_param.src_dev_type[DMAC_A_CHANNEL_0] = DMACTMODA0_SDP_APP;
    dmac_param.src_dev_type[DMAC_A_CHANNEL_1] = DMACTMODA1_SDP_APP & (~DMACTMODA1_SDP_APP);
    /* destination address */
    dmac_param.dst_address[DMAC_A_CHANNEL_0] = SPDWR0;
    dmac_param.dst_address[DMAC_A_CHANNEL_1] = (uint32_t)SPI_ReceivData;
    /* destination device type */
    dmac_param.dst_dev_type[DMAC_A_CHANNEL_0] = DMACTMODA0_DDP_APP & (~DMACTMODA0_DDP_APP);
    dmac_param.dst_dev_type[DMAC_A_CHANNEL_1] = DMACTMODA1_DDP_APP;
    /* transmit times */
    dmac_param.trans_times[DMAC_A_CHANNEL_0] = SPI_FIFO_MAX;
    dmac_param.trans_times[DMAC_A_CHANNEL_1] = SPI_FIFO_MAX;
    /* bus request mode */
    dmac_param.bus_req_mode[DMAC_A_CHANNEL_0] = DMACTMODA0_BRQ_APP & (~DMACTMODA0_BRQ_APP);
    dmac_param.bus_req_mode[DMAC_A_CHANNEL_1] = DMACTMODA1_BRQ_APP;
    /* mask  */
    dmac_param.channel_msk[DMAC_A_CHANNEL_0] = DMACMSKA0_MSK;
    dmac_param.channel_msk[DMAC_A_CHANNEL_1] = DMACMSKA1_MSK;

#if SPI_MASTER
    /* Initailize SPI. */
    spi_trans_param.device_select = SPI_DEVICE_MASTER;  /* Master*/
    spi_trans_param.baudrate = SPI_BAUDRATE;
    spi_trans_param.send_size = SPI_SEND_SIZE;          /* 8 byte */
    spi_trans_param.send_order = SPI_LSB_FIRST;         /* LSB first */
#else
    /* Initailize SPI. */
    spi_trans_param.device_select = SPI_DEVICE_SLAVE;   /* Slave */
    spi_trans_param.send_size = SPI_SEND_SIZE;          /* 8 byte */
    spi_trans_param.send_order = SPI_LSB_FIRST;         /* LSB first*/
#endif

    /* Open SPI drvier. */
    handle_spi = smpDrv_open(DRVNO_SPI, (uint32_t)(&spi_trans_param));
    /* Open DMAC drvier. */
    handle_dmac = smpDrv_open(DRVNO_DMAC, (uint32_t)(&dmac_param));
    if ((handle_spi == HANDLE_ID_1) && (handle_dmac == HANDLE_ID_1)) {

        /* SPI transmit not finished */
        while ((tbyte != 0) && (rtnVal == OK) && (error_sta == SPI_NO_ERR)) {

            /*--------------------------------------*/
            /*---------- DMAC-A0 send data ---------*/
            /*--------------------------------------*/
            dmac_param.channel[DMAC_A_CHANNEL_0] = DMAC_A_CHANNEL_USED;
            dmac_param.channel[DMAC_A_CHANNEL_1] = DMAC_A_CHANNEL_NOT_USED;
            if (tbyte > SPI_FIFO_MAX) {
                dmac_param.trans_times[DMAC_A_CHANNEL_0] = SPI_FIFO_MAX;
            }
            else {
                dmac_param.trans_times[DMAC_A_CHANNEL_0] = (uint32_t)tbyte;
            }
            /* Change DMAC transmit times. */
            rtnVal = smpDrv_ioctl(DRVNO_DMAC,
                                  UPLAT_7D_HAL_DMAC_CHANGE_TIMES,
                                  (uint32_t)(&dmac_param),
                                  handle_dmac);
            if (rtnVal == OK) {
                /* Execute DMAC transmit. */
                rtnVal = smpDrv_ioctl(DRVNO_DMAC,
                                      UPLAT_7D_HAL_DMAC_FOWARD,
                                      (uint32_t)(&dmac_param),
                                      handle_dmac);
            }
            if (rtnVal == OK) {
                /* Read DMAC status. */
                rtnVal = smpDrv_ioctl(DRVNO_DMAC,
                                      UPLAT_7D_HAL_DMAC_STATUS,
                                      (uint32_t)(&error_sta), handle_dmac);
                if ((error_sta & DMAINTA_ISTA0) == DMAINTA_ISTA0) {
                    error_sta = SPI_DMAC_SEND_ERR;
                }
                else {
                    error_sta = SPI_NO_ERR;
                }
            }

            /*--------------------------------------*/
            /*------------ SPI transmit ------------*/
            /*--------------------------------------*/
            if ((rtnVal == OK) && (error_sta == SPI_NO_ERR)) {
                if (tbyte > SPI_FIFO_MAX) {
                    tbyte -= SPI_FIFO_MAX;
                }
                else {
                    tbyte = 0;
                }
#if SPI_MASTER
                /* SPI master send. */
                rtnVal = smpDrv_ioctl(DRVNO_SPI,
                                      ML675050_HAL_SPI_MASTER_TX_DATA,
                                      1,
                                      handle_spi);
#else
                /* SPI slave send. */
                rtnVal = smpDrv_ioctl(DRVNO_SPI,
                                      ML675050_HAL_SPI_SLAVE_TX_DATA,
                                      1,
                                      handle_spi);
#endif

                if (rtnVal == OK) {
                    /* Read SPI status */
                    rtnVal = smpDrv_ioctl(DRVNO_SPI,
                                          ML675050_HAL_SPI_READ_STATUS,
                                          (uint32_t)(&error_sta),
                                          handle_spi);
                    /* Get receive data size. */
                    rx_size = (error_sta & SPSR0_RFD) >> 0xB;
                    if (rx_size > SPI_FIFO_MAX) {
                        rx_size = SPI_FIFO_MAX;
                    }
                    if (((error_sta & SPSR0_ORF) == SPSR0_ORF)
                        || ((error_sta & SPSR0_MDF) == SPSR0_MDF)) {
                        error_sta = SPI_SEND_ERR;
                    }
                    else {
                        error_sta = SPI_NO_ERR;
                    }
                }
            }

            /*--------------------------------------*/
            /*-------- DMAC-A1 receive data --------*/
            /*--------------------------------------*/
            if ((rtnVal == OK) && (error_sta == SPI_NO_ERR)) {
                /* DMAC-A1 receive */
                dmac_param.channel[DMAC_A_CHANNEL_0] = DMAC_A_CHANNEL_NOT_USED;
                dmac_param.channel[DMAC_A_CHANNEL_1] = DMAC_A_CHANNEL_USED;
                dmac_param.trans_times[DMAC_A_CHANNEL_1] = rx_size;
                /* Change DMAC transmit times. */
                rtnVal = smpDrv_ioctl(DRVNO_DMAC,
                                      UPLAT_7D_HAL_DMAC_CHANGE_TIMES,
                                      (uint32_t)(&dmac_param),
                                      handle_dmac);
                if (rtnVal == OK) {
                    /* Execute DMAC transmit. */
                    rtnVal = smpDrv_ioctl(DRVNO_DMAC,
                                          UPLAT_7D_HAL_DMAC_FOWARD,
                                          (uint32_t)(&dmac_param),
                                          handle_dmac);
                }
                if (rtnVal == OK) {
                    /* Read DMAC status. */
                    rtnVal = smpDrv_ioctl(DRVNO_DMAC,
                                          UPLAT_7D_HAL_DMAC_STATUS,
                                          (uint32_t)(&error_sta),
                                          handle_dmac);
                    if ((error_sta & DMAINTA_ISTA0) == DMAINTA_ISTA0) {
                        error_sta = SPI_DMAC_RECEIVE_ERR;
                    }
                    else {
                        error_sta = SPI_NO_ERR;
                    }
                }
            }
        }
    }

    if ((rtnVal == OK) && (error_sta == SPI_NO_ERR)) {
        /* Compare receive data to send data */
        for (i = 0; (i < SPI_BUFF_SIZE) && (error_sta == SPI_NO_ERR); i++) {
            if (SPI_SendData[i] != SPI_ReceivData[i]) {
                error_sta = SPI_DATA_CMP_ERR;
            }
        }
    }

    /* Close DMAC */
    smpDrv_close(DRVNO_DMAC, handle_dmac);
    /* Close SPI */
    smpDrv_close(DRVNO_SPI, handle_spi);

    switch (error_sta) {
    case SPI_NO_ERR:            /* No Error */
        debug_msg(_7_LED1_NUM_0, NULL);
        break;
    case SPI_DMAC_SEND_ERR:     /* dma send data error */
        debug_msg(_7_LED1_NUM_2, NULL);
        break;
    case SPI_SEND_ERR:          /* spi transmit data error */
        debug_msg(_7_LED1_NUM_1, NULL);
        break;
    case SPI_DMAC_RECEIVE_ERR:  /* dma receve data error */
        debug_msg(_7_LED1_NUM_3, NULL);
        break;
    case SPI_DATA_CMP_ERR:      /* data compare error */
        debug_msg(_7_LED1_NUM_4, NULL);
        break;
    default:
        break;
    }

    if ((rtnVal == OK) && (error_sta == SPI_NO_ERR)) {
        debug_msg(_3_LED_OK, NULL);
    }
    else {
        debug_msg(_3_LED_NG, NULL);
    }

    return rtnVal;
}

/************************************************************************/
/*                                                                      */
/*  Function Name   : ML675050smpAP_FTM_ART                             */
/*  Input           : void                                              */
/*  Output          : int16_t OK(1)                                     */
/*                            ERROR(-1)                                 */
/*                                                                      */
/*  Note : Sample program of ART.                                       */
/*                                                                      */
/************************************************************************/
extern volatile int16_t counter[6];
int16_t ML675050smpAP_FTM_ART(void) {
    int16_t rtnVal = OK;
    int16_t handle_fiq,handle_art;
    uint16_t start[6];
    uint16_t i;
    uPLAT_InterruptParam int_param;
    Art art;
    smpDrvInitPeripheral init_peripheral;

    /* Initialize peripheral. */
    init_peripheral.init_xbus.rombw = BWC_ROMBW_16;
    init_peripheral.init_xbus.srambw = BWC_SRAMBW_16;
    init_peripheral.init_xbus.iobw = BWC_IOBW_16;

    init_peripheral.init_xbus.romtype = ROMAC_ROMTYPE_0;
    init_peripheral.init_xbus.rombrst = ROMAC_ROMBRST_off;

    init_peripheral.init_xbus.sramtype = RAMAC_RAMTYPE_1;
    init_peripheral.init_xbus.srambrst = RAMAC_RAMBRST_off;

    init_peripheral.init_xbus.iotype = IOAC_IOTYPE_2;

    init_peripheral.init_xbus.sdrambw = DBWC_DBDRAM16;

    init_peripheral.init_xbus.standby = FALSE;

    init_peripheral.cache_mode = CACHE_WRITE_BACK;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -