mirror of https://github.com/ARMmbed/mbed-os.git
[NUC472/M453] Fix incorrect use of peripheral name as peripheral base address
parent
88a4baa2ad
commit
4e4c294fa3
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue