diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-01-11 00:13:45 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-01-11 00:13:45 +0000 |
commit | 7c4f2d571c68db93f4ed9a5f9e0d0ed15a9fdadf (patch) | |
tree | 96ec87d007490dac1654e9c213b937d099a8478f | |
parent | 2878c08369c4ac8819e0f6530784f22509bcab92 (diff) | |
download | px4-nuttx-7c4f2d571c68db93f4ed9a5f9e0d0ed15a9fdadf.tar.gz px4-nuttx-7c4f2d571c68db93f4ed9a5f9e0d0ed15a9fdadf.tar.bz2 px4-nuttx-7c4f2d571c68db93f4ed9a5f9e0d0ed15a9fdadf.zip |
Implement the new CAN txready method for STM32
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4291 42af7a65-404d-4744-a932-0658087f49c3
-rwxr-xr-x | nuttx/arch/arm/src/lpc17xx/lpc17_can.c | 4 | ||||
-rwxr-xr-x | nuttx/arch/arm/src/stm32/stm32_can.c | 45 | ||||
-rwxr-xr-x | nuttx/configs/stm3240g-eval/README.txt | 2 |
3 files changed, 46 insertions, 5 deletions
diff --git a/nuttx/arch/arm/src/lpc17xx/lpc17_can.c b/nuttx/arch/arm/src/lpc17xx/lpc17_can.c index 3539ce4af..1aee04508 100755 --- a/nuttx/arch/arm/src/lpc17xx/lpc17_can.c +++ b/nuttx/arch/arm/src/lpc17xx/lpc17_can.c @@ -849,7 +849,7 @@ static int can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg) * dev - An instance of the "upper half" can driver state structure. * * Returned Value: - * True is the CAN hardware is ready to accept another TX message. + * True if the CAN hardware is ready to accept another TX message. * ****************************************************************************/ @@ -874,7 +874,7 @@ static bool can_txready(FAR struct can_dev_s *dev) * dev - An instance of the "upper half" can driver state structure. * * Returned Value: - * True is there are no pending TX transfers in the CAN hardware. + * True if there are no pending TX transfers in the CAN hardware. * ****************************************************************************/ diff --git a/nuttx/arch/arm/src/stm32/stm32_can.c b/nuttx/arch/arm/src/stm32/stm32_can.c index 08f932b37..bf83773a9 100755 --- a/nuttx/arch/arm/src/stm32/stm32_can.c +++ b/nuttx/arch/arm/src/stm32/stm32_can.c @@ -130,6 +130,7 @@ 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 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 bool can_txready(FAR struct can_dev_s *dev); static bool can_txempty(FAR struct can_dev_s *dev); /* CAN interrupt handling */ @@ -156,6 +157,7 @@ static const struct can_ops_s g_canops = .co_ioctl = can_ioctl, .co_remoterequest = can_remoterequest, .co_send = can_send, + .co_txready = can_txready, .co_txempty = can_txempty, }; @@ -869,6 +871,45 @@ static int can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg) } /**************************************************************************** + * Name: can_txready + * + * Description: + * Return true if the CAN hardware can accept another TX message. + * + * Input Parameters: + * dev - An instance of the "upper half" can driver state structure. + * + * Returned Value: + * True if the CAN hardware is ready to accept another TX message. + * + ****************************************************************************/ + +static bool can_txready(FAR struct can_dev_s *dev) +{ + FAR struct stm32_can_s *priv = dev->cd_priv; + uint32_t regval; + + /* Return true if any mailbox is available */ + + regval = can_getreg(priv, STM32_CAN_TSR_OFFSET); + canllvdbg("CAN%d TSR: %08x\n", priv->port, regval); + + if ((regval & CAN_TSR_TME0) != 0) + { + return true; + } + else if ((regval & CAN_TSR_TME1) != 0) + { + return true; + } + else if ((regval & CAN_TSR_TME2) != 0) + { + return true; + } + return false; +} + +/**************************************************************************** * Name: can_txempty * * Description: @@ -882,7 +923,7 @@ static int can_send(FAR struct can_dev_s *dev, FAR struct can_msg_s *msg) * dev - An instance of the "upper half" can driver state structure. * * Returned Value: - * Zero on success; a negated errno on failure + * True if there are no pending TX transfers in the CAN hardware. * ****************************************************************************/ @@ -1240,7 +1281,7 @@ static int can_cellinit(struct stm32_can_s *priv) regval &= ~CAN_MCR_INRQ; can_putreg(priv, STM32_CAN_MCR_OFFSET, regval); - /* Wait until initialization mode is acknowledged */ + /* Wait until the initialization mode exit is acknowledged */ for (timeout = INAK_TIMEOUT; timeout > 0; timeout--) { diff --git a/nuttx/configs/stm3240g-eval/README.txt b/nuttx/configs/stm3240g-eval/README.txt index 93c1d0efe..f8659ca38 100755 --- a/nuttx/configs/stm3240g-eval/README.txt +++ b/nuttx/configs/stm3240g-eval/README.txt @@ -252,7 +252,7 @@ Configuration Options: CONFIG_STM32_CAN1 - Enable support for CAN1 CONFIG_CAN1_BAUD - CAN1 BAUD rate. Required if CONFIG_STM32_CAN1 is defined. - CONFIG_STM32_CAN2 - Enable support for CAN1 + CONFIG_STM32_CAN2 - Enable support for CAN2 CONFIG_CAN2_BAUD - CAN1 BAUD rate. Required if CONFIG_STM32_CAN2 is defined. CONFIG_CAN_REGDEBUG - If CONFIG_DEBUG is set, this will generate an dump of all CAN registers. |