| 182 | } |
| 183 | |
| 184 | u32 FCan_SendByIrq(FCan_t *Can_p, |
| 185 | struct FCan_Frame *Frame_p, |
| 186 | u32 FrameNumber, void (*UserIrqWait)(void)) |
| 187 | { |
| 188 | FCan_Config_t *Config_p; |
| 189 | u32 FrameIndex = 0; |
| 190 | u32 NeedSendOnce; |
| 191 | u32 cnt = 0; |
| 192 | Ft_assertZeroNum(Can_p != NULL); |
| 193 | Ft_assertZeroNum(Can_p->IsReady == FT_COMPONENT_IS_READLY); |
| 194 | Config_p = &Can_p->Config; |
| 195 | |
| 196 | if (NULL == Frame_p) |
| 197 | { |
| 198 | FT_CAN_DEBUG_E("Frame_p is NULL , %s: %d", __FILE__, __LINE__); |
| 199 | return 0; |
| 200 | } |
| 201 | |
| 202 | if (0 == FrameNumber) |
| 203 | { |
| 204 | FT_CAN_DEBUG_E("FrameNumber is 0 , %s: %d", __FILE__, __LINE__); |
| 205 | return 0; |
| 206 | } |
| 207 | |
| 208 | for (; 0 < FrameNumber;) |
| 209 | { |
| 210 | if (FrameNumber > Config_p->TxFifoDeepth) |
| 211 | { |
| 212 | NeedSendOnce = Config_p->TxFifoDeepth; |
| 213 | FrameNumber -= Config_p->TxFifoDeepth; |
| 214 | } |
| 215 | else |
| 216 | { |
| 217 | NeedSendOnce = FrameNumber; |
| 218 | FrameNumber = 0; |
| 219 | } |
| 220 | Ft_printf("shut down tranmission \r\n"); |
| 221 | /*shut down tranmission*/ |
| 222 | FCan_ClearBit(Config_p->CanBaseAddress, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); |
| 223 | FCan_ClearBit(Config_p->CanBaseAddress, FCAN_CTRL_OFFSET, FCAN_CTRL_TXREQ_MASK); |
| 224 | FCan_SetBit(Config_p->CanBaseAddress, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); |
| 225 | Ft_printf("NeedSendOnce %d \r\n", NeedSendOnce); |
| 226 | for (cnt = 0; cnt < NeedSendOnce; cnt++) |
| 227 | { |
| 228 | FCan_SendFifo(Can_p, &Frame_p[FrameIndex]); |
| 229 | FrameIndex++; |
| 230 | } |
| 231 | Can_p->TxFifoCnt = NeedSendOnce; |
| 232 | |
| 233 | /* triggers tranmission */ |
| 234 | FCan_ClearBit(Config_p->CanBaseAddress, FCAN_CTRL_OFFSET, FCAN_CTRL_XFER_MASK); |
| 235 | FCan_SetBit(Config_p->CanBaseAddress, FCAN_CTRL_OFFSET, FCAN_CTRL_TXREQ_MASK); |
| 236 | FCan_SetBit(Config_p->CanBaseAddress, FCAN_CTRL_OFFSET, FCAN_CTRL_TXREQ_MASK | FCAN_CTRL_XFER_MASK); |
| 237 | |
| 238 | if (UserIrqWait) |
| 239 | { |
| 240 | UserIrqWait(); |
| 241 | } |
no test coverage detected