diff --git a/targets/TARGET_NUVOTON/TARGET_M451/can_api.c b/targets/TARGET_NUVOTON/TARGET_M451/can_api.c index ba43d93b0b..2625298a78 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/can_api.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/can_api.c @@ -69,7 +69,7 @@ PA0 = 0x00; PA1 = 0x00; - CAN_Open((CAN_T *)obj->can, 500000, CAN_NORMAL_MODE); + CAN_Open((CAN_T *)NU_MODBASE(obj->can), 500000, CAN_NORMAL_MODE); can_filter(obj, 0, 0, CANStandard, 0); } @@ -91,9 +91,9 @@ void can_free(can_t *obj) int can_frequency(can_t *obj, int hz) { - CAN_SetBaudRate((CAN_T *)obj->can, hz); + CAN_SetBaudRate((CAN_T *)NU_MODBASE(obj->can), hz); - return CAN_GetCANBitRate((CAN_T *)obj->can); + return CAN_GetCANBitRate((CAN_T *)NU_MODBASE(obj->can)); } static void can_irq(CANName name, int id) @@ -154,7 +154,7 @@ void can_irq_init(can_t *obj, can_irq_handler handler, uint32_t id) void can_irq_free(can_t *obj) { - CAN_DisableInt((CAN_T *)obj->can, (CAN_CON_IE_Msk|CAN_CON_SIE_Msk|CAN_CON_EIE_Msk)); + CAN_DisableInt((CAN_T *)NU_MODBASE(obj->can), (CAN_CON_IE_Msk|CAN_CON_SIE_Msk|CAN_CON_EIE_Msk)); can_irq_ids[obj->index] = 0; @@ -163,8 +163,9 @@ void can_irq_free(can_t *obj) void can_irq_set(can_t *obj, CanIrqType irq, uint32_t enable) { + CAN_T *can_base = (CAN_T *) NU_MODBASE(obj->can); - CAN_EnterInitMode((CAN_T*)obj->can, ((enable != 0 )? CAN_CON_IE_Msk :0) ); + CAN_EnterInitMode(can_base, ((enable != 0 )? CAN_CON_IE_Msk :0) ); switch (irq) @@ -172,15 +173,15 @@ void can_irq_set(can_t *obj, CanIrqType irq, uint32_t enable) case IRQ_ERROR: case IRQ_BUS: case IRQ_PASSIVE: - ((CAN_T *)(obj->can))->CON = (((CAN_T *)(obj->can))->CON) |CAN_CON_EIE_Msk; - ((CAN_T *)(obj->can))->CON = (((CAN_T *)(obj->can))->CON) |CAN_CON_SIE_Msk; + can_base->CON = can_base->CON |CAN_CON_EIE_Msk; + can_base->CON = can_base->CON |CAN_CON_SIE_Msk; break; case IRQ_RX: case IRQ_TX: case IRQ_OVERRUN: case IRQ_WAKEUP: - ((CAN_T *)(obj->can))->CON = (((CAN_T *)(obj->can))->CON) |CAN_CON_SIE_Msk; + can_base->CON = can_base->CON |CAN_CON_SIE_Msk; break; default: @@ -188,7 +189,7 @@ void can_irq_set(can_t *obj, CanIrqType irq, uint32_t enable) } - CAN_LeaveInitMode((CAN_T*)obj->can); + CAN_LeaveInitMode(can_base); NVIC_SetVector(CAN0_IRQn, (uint32_t)&CAN0_IRQHandler); NVIC_EnableIRQ(CAN0_IRQn); @@ -205,14 +206,14 @@ int can_write(can_t *obj, CAN_Message msg, int cc) CMsg.DLC = msg.len; memcpy((void *)&CMsg.Data[0],(const void *)&msg.data[0], (unsigned int)8); - return CAN_Transmit((CAN_T *)(obj->can), cc, &CMsg); + return CAN_Transmit((CAN_T *)NU_MODBASE(obj->can), cc, &CMsg); } int can_read(can_t *obj, CAN_Message *msg, int handle) { STR_CANMSG_T CMsg; - if(!CAN_Receive((CAN_T *)(obj->can), handle, &CMsg)) + if(!CAN_Receive((CAN_T *)NU_MODBASE(obj->can), handle, &CMsg)) return 0; msg->format = (CANFormat)CMsg.IdType; @@ -226,32 +227,34 @@ int can_read(can_t *obj, CAN_Message *msg, int handle) int can_mode(can_t *obj, CanMode mode) { + CAN_T *can_base = (CAN_T *) NU_MODBASE(obj->can); + int success = 0; switch (mode) { case MODE_RESET: - CAN_LeaveTestMode((CAN_T*)obj->can); + CAN_LeaveTestMode(can_base); success = 1; break; case MODE_NORMAL: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_BASIC_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_BASIC_Msk); success = 1; break; case MODE_SILENT: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_SILENT_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_SILENT_Msk); success = 1; break; case MODE_TEST_LOCAL: case MODE_TEST_GLOBAL: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_LBACK_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_LBACK_Msk); success = 1; break; case MODE_TEST_SILENT: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk); success = 1; break; @@ -267,7 +270,7 @@ int can_mode(can_t *obj, CanMode mode) int can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t handle) { - return CAN_SetRxMsg((CAN_T *)(obj->can), handle , (uint32_t)format, id); + return CAN_SetRxMsg((CAN_T *)NU_MODBASE(obj->can), handle , (uint32_t)format, id); } @@ -285,19 +288,19 @@ void can_reset(can_t *obj) unsigned char can_rderror(can_t *obj) { - CAN_T *can = (CAN_T *)(obj->can); + CAN_T *can = (CAN_T *)NU_MODBASE(obj->can); return ((can->ERR>>8)&0xFF); } unsigned char can_tderror(can_t *obj) { - CAN_T *can = (CAN_T *)(obj->can); + CAN_T *can = (CAN_T *)NU_MODBASE(obj->can); return ((can->ERR)&0xFF); } void can_monitor(can_t *obj, int silent) { - CAN_EnterTestMode((CAN_T *)(obj->can), CAN_TEST_SILENT_Msk); + CAN_EnterTestMode((CAN_T *)NU_MODBASE(obj->can), CAN_TEST_SILENT_Msk); } #endif // DEVICE_CAN diff --git a/targets/TARGET_NUVOTON/TARGET_M451/serial_api.c b/targets/TARGET_NUVOTON/TARGET_M451/serial_api.c index 93c9df8a1b..472ffe0657 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/serial_api.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/serial_api.c @@ -255,7 +255,7 @@ void serial_free(serial_t *obj) void serial_baud(serial_t *obj, int baudrate) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); obj->serial.baudrate = baudrate; UART_Open((UART_T *) NU_MODBASE(obj->serial.uart), baudrate); @@ -263,7 +263,7 @@ void serial_baud(serial_t *obj, int baudrate) { void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); // TODO: Assert for not supported parity and data bits obj->serial.databits = data_bits; @@ -325,7 +325,7 @@ void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, Pi void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); MBED_ASSERT(modinit != NULL); @@ -515,7 +515,7 @@ int serial_tx_asynch(serial_t *obj, const void *tx, size_t tx_length, uint8_t tx // NUC472: End of source address // M451: Start of source address PDMA_SAR_INC, // Source address incremental - (uint32_t) obj->serial.uart, // Destination address + (uint32_t) NU_MODBASE(obj->serial.uart), // Destination address PDMA_DAR_FIX); // Destination address fixed PDMA_SetBurstType(obj->serial.dma_chn_id_tx, PDMA_REQ_SINGLE, // Single mode @@ -572,7 +572,7 @@ void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_widt (rx_width == 8) ? PDMA_WIDTH_8 : (rx_width == 16) ? PDMA_WIDTH_16 : PDMA_WIDTH_32, rx_length); PDMA_SetTransferAddr(obj->serial.dma_chn_id_rx, - (uint32_t) obj->serial.uart, // Source address + (uint32_t) NU_MODBASE(obj->serial.uart), // Source address PDMA_SAR_FIX, // Source address fixed (uint32_t) rx, // NOTE: // NUC472: End of destination address @@ -593,7 +593,7 @@ void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_widt void serial_tx_abort_asynch(serial_t *obj) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); if (obj->serial.dma_usage_tx != DMA_USAGE_NEVER) { if (obj->serial.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) { diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/can_api.c b/targets/TARGET_NUVOTON/TARGET_NUC472/can_api.c index 0f8fd1c295..ad4d30582b 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/can_api.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/can_api.c @@ -75,7 +75,7 @@ PA2 = 0x00; PA3 = 0x00; - CAN_Open((CAN_T *)obj->can, 500000, CAN_NORMAL_MODE); + CAN_Open((CAN_T *)NU_MODBASE(obj->can), 500000, CAN_NORMAL_MODE); can_filter(obj, 0, 0, CANStandard, 0); } @@ -97,9 +97,9 @@ void can_free(can_t *obj) int can_frequency(can_t *obj, int hz) { - CAN_SetBaudRate((CAN_T *)obj->can, hz); + CAN_SetBaudRate((CAN_T *)NU_MODBASE(obj->can), hz); - return CAN_GetCANBitRate((CAN_T *)obj->can); + return CAN_GetCANBitRate((CAN_T *)NU_MODBASE(obj->can)); } static void can_irq(CANName name, int id) @@ -188,7 +188,7 @@ void can_irq_init(can_t *obj, can_irq_handler handler, uint32_t id) void can_irq_free(can_t *obj) { - CAN_DisableInt((CAN_T *)obj->can, (CAN_CON_IE_Msk|CAN_CON_SIE_Msk|CAN_CON_EIE_Msk)); + CAN_DisableInt((CAN_T *)NU_MODBASE(obj->can), (CAN_CON_IE_Msk|CAN_CON_SIE_Msk|CAN_CON_EIE_Msk)); can_irq_ids[obj->index] = 0; @@ -202,25 +202,26 @@ void can_irq_free(can_t *obj) void can_irq_set(can_t *obj, CanIrqType irq, uint32_t enable) { + CAN_T *can_base = (CAN_T *) NU_MODBASE(obj->can); - CAN_EnterInitMode((CAN_T*)obj->can); + CAN_EnterInitMode((CAN_T*)can_base); - ((CAN_T *)(obj->can))->CON = (((CAN_T *)(obj->can))->CON ) | ((enable != 0 )? CAN_CON_IE_Msk :0); + ((CAN_T *)can_base)->CON = (((CAN_T *)can_base)->CON ) | ((enable != 0 )? CAN_CON_IE_Msk :0); switch (irq) { case IRQ_ERROR: case IRQ_BUS: case IRQ_PASSIVE: - ((CAN_T *)(obj->can))->CON = (((CAN_T *)(obj->can))->CON) |CAN_CON_EIE_Msk; - ((CAN_T *)(obj->can))->CON = (((CAN_T *)(obj->can))->CON) |CAN_CON_SIE_Msk; + can_base->CON = can_base->CON |CAN_CON_EIE_Msk; + can_base->CON = can_base->CON |CAN_CON_SIE_Msk; break; case IRQ_RX: case IRQ_TX: case IRQ_OVERRUN: case IRQ_WAKEUP: - ((CAN_T *)(obj->can))->CON = (((CAN_T *)(obj->can))->CON) |CAN_CON_SIE_Msk; + can_base->CON = can_base->CON |CAN_CON_SIE_Msk; break; default: @@ -228,7 +229,7 @@ void can_irq_set(can_t *obj, CanIrqType irq, uint32_t enable) } - CAN_LeaveInitMode((CAN_T*)obj->can); + CAN_LeaveInitMode(can_base); if(!obj->index) { @@ -253,14 +254,14 @@ int can_write(can_t *obj, CAN_Message msg, int cc) CMsg.DLC = msg.len; memcpy((void *)&CMsg.Data[0],(const void *)&msg.data[0], (unsigned int)8); - return CAN_Transmit((CAN_T *)(obj->can), cc, &CMsg); + return CAN_Transmit((CAN_T *)NU_MODBASE(obj->can), cc, &CMsg); } int can_read(can_t *obj, CAN_Message *msg, int handle) { STR_CANMSG_T CMsg; - if(!CAN_Receive((CAN_T *)(obj->can), handle, &CMsg)) + if(!CAN_Receive((CAN_T *)NU_MODBASE(obj->can), handle, &CMsg)) return 0; msg->format = (CANFormat)CMsg.IdType; @@ -274,32 +275,34 @@ int can_read(can_t *obj, CAN_Message *msg, int handle) int can_mode(can_t *obj, CanMode mode) { + CAN_T *can_base = (CAN_T *) NU_MODBASE(obj->can); + int success = 0; switch (mode) { case MODE_RESET: - CAN_LeaveTestMode((CAN_T*)obj->can); + CAN_LeaveTestMode(can_base); success = 1; break; case MODE_NORMAL: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_BASIC_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_BASIC_Msk); success = 1; break; case MODE_SILENT: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_SILENT_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_SILENT_Msk); success = 1; break; case MODE_TEST_LOCAL: case MODE_TEST_GLOBAL: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_LBACK_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_LBACK_Msk); success = 1; break; case MODE_TEST_SILENT: - CAN_EnterTestMode((CAN_T*)(obj->can), CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk); + CAN_EnterTestMode(can_base, CAN_TEST_SILENT_Msk | CAN_TEST_LBACK_Msk); success = 1; break; @@ -315,7 +318,7 @@ int can_mode(can_t *obj, CanMode mode) int can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t handle) { - return CAN_SetRxMsg((CAN_T *)(obj->can), handle , (uint32_t)format, id); + return CAN_SetRxMsg((CAN_T *)NU_MODBASE(obj->can), handle , (uint32_t)format, id); } @@ -333,19 +336,19 @@ void can_reset(can_t *obj) unsigned char can_rderror(can_t *obj) { - CAN_T *can = (CAN_T *)(obj->can); + CAN_T *can = (CAN_T *)NU_MODBASE(obj->can); return ((can->ERR>>8)&0xFF); } unsigned char can_tderror(can_t *obj) { - CAN_T *can = (CAN_T *)(obj->can); + CAN_T *can = (CAN_T *)NU_MODBASE(obj->can); return ((can->ERR)&0xFF); } void can_monitor(can_t *obj, int silent) { - CAN_EnterTestMode((CAN_T *)(obj->can), CAN_TEST_SILENT_Msk); + CAN_EnterTestMode((CAN_T *)NU_MODBASE(obj->can), CAN_TEST_SILENT_Msk); } #endif // DEVICE_CAN diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/serial_api.c b/targets/TARGET_NUVOTON/TARGET_NUC472/serial_api.c index e18938aafe..1426795aa5 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/serial_api.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/serial_api.c @@ -285,7 +285,7 @@ void serial_free(serial_t *obj) void serial_baud(serial_t *obj, int baudrate) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); obj->serial.baudrate = baudrate; UART_Open((UART_T *) NU_MODBASE(obj->serial.uart), baudrate); @@ -293,7 +293,7 @@ void serial_baud(serial_t *obj, int baudrate) { void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); // TODO: Assert for not supported parity and data bits obj->serial.databits = data_bits; @@ -357,7 +357,7 @@ void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, Pi void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); MBED_ASSERT(modinit != NULL); @@ -555,7 +555,7 @@ int serial_tx_asynch(serial_t *obj, const void *tx, size_t tx_length, uint8_t tx PDMA_SetTransferAddr(obj->serial.dma_chn_id_tx, ((uint32_t) tx) + (tx_width / 8) * tx_length, // NOTE: End of source address PDMA_SAR_INC, // Source address incremental - (uint32_t) obj->serial.uart, // Destination address + (uint32_t) NU_MODBASE(obj->serial.uart), // Destination address PDMA_DAR_FIX); // Destination address fixed PDMA_SetBurstType(obj->serial.dma_chn_id_tx, PDMA_REQ_SINGLE, // Single mode @@ -612,7 +612,7 @@ void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_widt (rx_width == 8) ? PDMA_WIDTH_8 : (rx_width == 16) ? PDMA_WIDTH_16 : PDMA_WIDTH_32, rx_length); PDMA_SetTransferAddr(obj->serial.dma_chn_id_rx, - (uint32_t) obj->serial.uart, // Source address + (uint32_t) NU_MODBASE(obj->serial.uart), // Source address PDMA_SAR_FIX, // Source address fixed ((uint32_t) rx) + (rx_width / 8) * rx_length, // NOTE: End of destination address PDMA_DAR_INC); // Destination address incremental @@ -631,7 +631,7 @@ void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_widt void serial_tx_abort_asynch(serial_t *obj) { // Flush Tx FIFO. Otherwise, output data may get lost on this change. - while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + while (! UART_IS_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart)))); if (obj->serial.dma_usage_tx != DMA_USAGE_NEVER) { if (obj->serial.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) {