arch/arm/src/lpc17xx/lpc17_can.c: The name can_txready clashes with Nuttx CAN core global function. LPC178x has only single LPC17_SYSCON_PCLKSEL with only single divisor.

This commit is contained in:
Pavel Pisa 2019-01-25 08:24:09 -06:00 committed by Gregory Nutt
parent df64811269
commit f9ac7a22ca
2 changed files with 58 additions and 45 deletions

View File

@ -201,12 +201,13 @@ config LPC17_UART4
config LPC17_CAN1 config LPC17_CAN1
bool "CAN1" bool "CAN1"
select UART4_SERIALDRIVER
default n default n
select CAN
config LPC17_CAN2 config LPC17_CAN2
bool "CAN2" bool "CAN2"
default n default n
select CAN
config LPC17_SPI config LPC17_SPI
bool "SPI" bool "SPI"

View File

@ -203,16 +203,16 @@ static void can_putcommon(uint32_t addr, uint32_t value);
/* CAN methods */ /* CAN methods */
static void can_reset(FAR struct can_dev_s *dev); static void lpc17can_reset(FAR struct can_dev_s *dev);
static int can_setup(FAR struct can_dev_s *dev); static int lpc17can_setup(FAR struct can_dev_s *dev);
static void can_shutdown(FAR struct can_dev_s *dev); static void lpc17can_shutdown(FAR struct can_dev_s *dev);
static void can_rxint(FAR struct can_dev_s *dev, bool enable); static void lpc17can_rxint(FAR struct can_dev_s *dev, bool enable);
static void can_txint(FAR struct can_dev_s *dev, bool enable); static void lpc17can_txint(FAR struct can_dev_s *dev, bool enable);
static int can_ioctl(FAR struct can_dev_s *dev, int cmd, unsigned long arg); static int lpc17can_ioctl(FAR struct can_dev_s *dev, int cmd, unsigned long arg);
static int can_remoterequest(FAR struct can_dev_s *dev, uint16_t id); static int lpc17can_remoterequest(FAR struct can_dev_s *dev, uint16_t id);
static int can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg); static int lpc17can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg);
static bool can_txready(FAR struct can_dev_s *dev); static bool lpc17can_txready(FAR struct can_dev_s *dev);
static bool can_txempty(FAR struct can_dev_s *dev); static bool lpc17can_txempty(FAR struct can_dev_s *dev);
/* CAN interrupts */ /* CAN interrupts */
@ -229,16 +229,16 @@ static int can_bittiming(struct up_dev_s *priv);
static const struct can_ops_s g_canops = static const struct can_ops_s g_canops =
{ {
.co_reset = can_reset, .co_reset = lpc17can_reset,
.co_setup = can_setup, .co_setup = lpc17can_setup,
.co_shutdown = can_shutdown, .co_shutdown = lpc17can_shutdown,
.co_rxint = can_rxint, .co_rxint = lpc17can_rxint,
.co_txint = can_txint, .co_txint = lpc17can_txint,
.co_ioctl = can_ioctl, .co_ioctl = lpc17can_ioctl,
.co_remoterequest = can_remoterequest, .co_remoterequest = lpc17can_remoterequest,
.co_send = can_send, .co_send = lpc17can_send,
.co_txready = can_txready, .co_txready = lpc17can_txready,
.co_txempty = can_txempty, .co_txempty = lpc17can_txempty,
}; };
#ifdef CONFIG_LPC17_CAN1 #ifdef CONFIG_LPC17_CAN1
@ -467,11 +467,11 @@ static void can_putcommon(uint32_t addr, uint32_t value)
#endif #endif
/**************************************************************************** /****************************************************************************
* Name: can_reset * Name: lpc17can_reset
* *
* Description: * Description:
* Reset the CAN device. Called early to initialize the hardware. This * Reset the CAN device. Called early to initialize the hardware. This
* function is called, before can_setup() and on error conditions. * function is called, before lpc17can_setup() and on error conditions.
* *
* Input Parameters: * Input Parameters:
* dev - An instance of the "upper half" can driver state structure. * dev - An instance of the "upper half" can driver state structure.
@ -481,7 +481,7 @@ static void can_putcommon(uint32_t addr, uint32_t value)
* *
****************************************************************************/ ****************************************************************************/
static void can_reset(FAR struct can_dev_s *dev) static void lpc17can_reset(FAR struct can_dev_s *dev)
{ {
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
irqstate_t flags; irqstate_t flags;
@ -518,7 +518,7 @@ static void can_reset(FAR struct can_dev_s *dev)
} }
/**************************************************************************** /****************************************************************************
* Name: can_setup * Name: lpc17can_setup
* *
* Description: * Description:
* Configure the CAN. This method is called the first time that the CAN * Configure the CAN. This method is called the first time that the CAN
@ -534,7 +534,7 @@ static void can_reset(FAR struct can_dev_s *dev)
* *
****************************************************************************/ ****************************************************************************/
static int can_setup(FAR struct can_dev_s *dev) static int lpc17can_setup(FAR struct can_dev_s *dev)
{ {
#ifdef CONFIG_DEBUG_CAN_INFO #ifdef CONFIG_DEBUG_CAN_INFO
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
@ -553,7 +553,7 @@ static int can_setup(FAR struct can_dev_s *dev)
} }
/**************************************************************************** /****************************************************************************
* Name: can_shutdown * Name: lpc17can_shutdown
* *
* Description: * Description:
* Disable the CAN. This method is called when the CAN device is closed. * Disable the CAN. This method is called when the CAN device is closed.
@ -567,7 +567,7 @@ static int can_setup(FAR struct can_dev_s *dev)
* *
****************************************************************************/ ****************************************************************************/
static void can_shutdown(FAR struct can_dev_s *dev) static void lpc17can_shutdown(FAR struct can_dev_s *dev)
{ {
#ifdef CONFIG_DEBUG_CAN_INFO #ifdef CONFIG_DEBUG_CAN_INFO
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
@ -580,7 +580,7 @@ static void can_shutdown(FAR struct can_dev_s *dev)
} }
/**************************************************************************** /****************************************************************************
* Name: can_rxint * Name: lpc17can_rxint
* *
* Description: * Description:
* Call to enable or disable RX interrupts. * Call to enable or disable RX interrupts.
@ -593,7 +593,7 @@ static void can_shutdown(FAR struct can_dev_s *dev)
* *
****************************************************************************/ ****************************************************************************/
static void can_rxint(FAR struct can_dev_s *dev, bool enable) static void lpc17can_rxint(FAR struct can_dev_s *dev, bool enable)
{ {
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
uint32_t regval; uint32_t regval;
@ -621,7 +621,7 @@ static void can_rxint(FAR struct can_dev_s *dev, bool enable)
} }
/**************************************************************************** /****************************************************************************
* Name: can_txint * Name: lpc17can_txint
* *
* Description: * Description:
* Call to enable or disable TX interrupts. * Call to enable or disable TX interrupts.
@ -634,7 +634,7 @@ static void can_rxint(FAR struct can_dev_s *dev, bool enable)
* *
****************************************************************************/ ****************************************************************************/
static void can_txint(FAR struct can_dev_s *dev, bool enable) static void lpc17can_txint(FAR struct can_dev_s *dev, bool enable)
{ {
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
uint32_t regval; uint32_t regval;
@ -666,7 +666,7 @@ static void can_txint(FAR struct can_dev_s *dev, bool enable)
} }
/**************************************************************************** /****************************************************************************
* Name: can_ioctl * Name: lpc17can_ioctl
* *
* Description: * Description:
* All ioctl calls will be routed through this method * All ioctl calls will be routed through this method
@ -679,14 +679,14 @@ static void can_txint(FAR struct can_dev_s *dev, bool enable)
* *
****************************************************************************/ ****************************************************************************/
static int can_ioctl(FAR struct can_dev_s *dev, int cmd, unsigned long arg) static int lpc17can_ioctl(FAR struct can_dev_s *dev, int cmd, unsigned long arg)
{ {
canerr("ERROR: Fix me -- Not Implemented\n"); canerr("ERROR: Fix me -- Not Implemented\n");
return 0; return 0;
} }
/**************************************************************************** /****************************************************************************
* Name: can_remoterequest * Name: lpc17can_remoterequest
* *
* Description: * Description:
* Send a remote request * Send a remote request
@ -699,14 +699,14 @@ static int can_ioctl(FAR struct can_dev_s *dev, int cmd, unsigned long arg)
* *
****************************************************************************/ ****************************************************************************/
static int can_remoterequest(FAR struct can_dev_s *dev, uint16_t id) static int lpc17can_remoterequest(FAR struct can_dev_s *dev, uint16_t id)
{ {
canerr("ERROR: Fix me -- Not Implemented\n"); canerr("ERROR: Fix me -- Not Implemented\n");
return 0; return 0;
} }
/**************************************************************************** /****************************************************************************
* Name: can_send * Name: lpc17can_send
* *
* Description: * Description:
* Send one can message. * Send one can message.
@ -728,7 +728,7 @@ static int can_remoterequest(FAR struct can_dev_s *dev, uint16_t id)
* *
****************************************************************************/ ****************************************************************************/
static int can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg) static int lpc17can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg)
{ {
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
uint32_t tid = (uint32_t)msg->cm_hdr.ch_id; uint32_t tid = (uint32_t)msg->cm_hdr.ch_id;
@ -871,7 +871,7 @@ static int can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg)
} }
/**************************************************************************** /****************************************************************************
* Name: can_txready * Name: lpc17can_txready
* *
* Description: * Description:
* Return true if the CAN hardware can accept another TX message. * Return true if the CAN hardware can accept another TX message.
@ -884,7 +884,7 @@ static int can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg)
* *
****************************************************************************/ ****************************************************************************/
static bool can_txready(FAR struct can_dev_s *dev) static bool lpc17can_txready(FAR struct can_dev_s *dev)
{ {
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
uint32_t regval = can_getreg(priv, LPC17_CAN_SR_OFFSET); uint32_t regval = can_getreg(priv, LPC17_CAN_SR_OFFSET);
@ -892,7 +892,7 @@ static bool can_txready(FAR struct can_dev_s *dev)
} }
/**************************************************************************** /****************************************************************************
* Name: can_txempty * Name: lpc17can_txempty
* *
* Description: * Description:
* Return true if all message have been sent. If for example, the CAN * Return true if all message have been sent. If for example, the CAN
@ -909,7 +909,7 @@ static bool can_txready(FAR struct can_dev_s *dev)
* *
****************************************************************************/ ****************************************************************************/
static bool can_txempty(FAR struct can_dev_s *dev) static bool lpc17can_txempty(FAR struct can_dev_s *dev)
{ {
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv; FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->cd_priv;
uint32_t regval = can_getreg(priv, LPC17_CAN_GSR_OFFSET); uint32_t regval = can_getreg(priv, LPC17_CAN_GSR_OFFSET);
@ -1241,11 +1241,17 @@ FAR struct can_dev_s *lpc17_caninitialize(int port)
* in low level clock configuration logic). * in low level clock configuration logic).
*/ */
#ifdef LPC178x
regval = can_getcommon(LPC17_SYSCON_PCLKSEL);
regval &= SYSCON_PCLKSEL_PCLKDIV_MASK
regval >>= SYSCON_PCLKSEL_PCLKDIV_SHIFT;
g_can1pri.divisor = regval;
#else
regval = can_getcommon(LPC17_SYSCON_PCLKSEL0); regval = can_getcommon(LPC17_SYSCON_PCLKSEL0);
regval &= ~SYSCON_PCLKSEL0_CAN1_MASK; regval &= ~SYSCON_PCLKSEL0_CAN1_MASK;
regval |= (CAN1_CCLK_DIVISOR << SYSCON_PCLKSEL0_CAN1_SHIFT); regval |= (CAN1_CCLK_DIVISOR << SYSCON_PCLKSEL0_CAN1_SHIFT);
can_putcommon(LPC17_SYSCON_PCLKSEL0, regval); can_putcommon(LPC17_SYSCON_PCLKSEL0, regval);
#endif
/* Configure CAN GPIO pins */ /* Configure CAN GPIO pins */
lpc17_configgpio(GPIO_CAN1_RD); lpc17_configgpio(GPIO_CAN1_RD);
@ -1268,11 +1274,17 @@ FAR struct can_dev_s *lpc17_caninitialize(int port)
* in low level clock configuration logic). * in low level clock configuration logic).
*/ */
#ifdef LPC178x
regval = can_getcommon(LPC17_SYSCON_PCLKSEL);
regval &= SYSCON_PCLKSEL_PCLKDIV_MASK;
regval >>= SYSCON_PCLKSEL_PCLKDIV_SHIFT;
g_can2priv.divisor = regval;
#else
regval = can_getcommon(LPC17_SYSCON_PCLKSEL0); regval = can_getcommon(LPC17_SYSCON_PCLKSEL0);
regval &= ~SYSCON_PCLKSEL0_CAN2_MASK; regval &= ~SYSCON_PCLKSEL0_CAN2_MASK;
regval |= (CAN2_CCLK_DIVISOR << SYSCON_PCLKSEL0_CAN2_SHIFT); regval |= (CAN2_CCLK_DIVISOR << SYSCON_PCLKSEL0_CAN2_SHIFT);
can_putcommon(LPC17_SYSCON_PCLKSEL0, regval); can_putcommon(LPC17_SYSCON_PCLKSEL0, regval);
#endif
/* Configure CAN GPIO pins */ /* Configure CAN GPIO pins */
lpc17_configgpio(GPIO_CAN2_RD); lpc17_configgpio(GPIO_CAN2_RD);
@ -1290,7 +1302,7 @@ FAR struct can_dev_s *lpc17_caninitialize(int port)
/* Then just perform a CAN reset operation */ /* Then just perform a CAN reset operation */
can_reset(candev); lpc17can_reset(candev);
leave_critical_section(flags); leave_critical_section(flags);
return candev; return candev;
} }