📄 app_ml675050.c
字号:
}
}
}
/* 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 + -