| 121 | } |
| 122 | |
| 123 | static void bxcan_init(CAN_TypeDef *pcan, rt_uint32_t baud, rt_uint32_t mode) |
| 124 | { |
| 125 | CAN_InitTypeDef CAN_InitStructure; |
| 126 | |
| 127 | Ls1c_CanBPS_t bps ; |
| 128 | |
| 129 | switch(baud) |
| 130 | { |
| 131 | case CAN1MBaud: |
| 132 | bps = LS1C_CAN1MBaud; |
| 133 | break; |
| 134 | case CAN800kBaud: |
| 135 | bps = LS1C_CAN800kBaud; |
| 136 | break; |
| 137 | case CAN500kBaud: |
| 138 | bps = LS1C_CAN500kBaud; |
| 139 | break; |
| 140 | case CAN250kBaud: |
| 141 | bps = LS1C_CAN250kBaud; |
| 142 | break; |
| 143 | case CAN125kBaud: |
| 144 | bps = LS1C_CAN125kBaud; |
| 145 | break; |
| 146 | case CAN50kBaud: |
| 147 | bps = LS1C_CAN40kBaud; |
| 148 | break; |
| 149 | default: |
| 150 | bps = LS1C_CAN250kBaud; |
| 151 | break; |
| 152 | } |
| 153 | |
| 154 | switch (mode) |
| 155 | { |
| 156 | case RT_CAN_MODE_NORMAL: |
| 157 | CAN_InitStructure.CAN_Mode = 0x00; |
| 158 | break; |
| 159 | case RT_CAN_MODE_LISTEN: |
| 160 | CAN_InitStructure.CAN_Mode = CAN_Mode_LOM; |
| 161 | break; |
| 162 | case RT_CAN_MODE_LOOPBACK: |
| 163 | CAN_InitStructure.CAN_Mode = CAN_Mode_STM; |
| 164 | |
| 165 | break; |
| 166 | case RT_CAN_MODE_LOOPBACKANLISTEN: |
| 167 | CAN_InitStructure.CAN_Mode = CAN_Mode_STM|CAN_Mode_LOM; |
| 168 | break; |
| 169 | } |
| 170 | CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; |
| 171 | |
| 172 | switch (bps) |
| 173 | { |
| 174 | case LS1C_CAN1MBaud: |
| 175 | CAN_InitStructure.CAN_Prescaler = 9; |
| 176 | CAN_InitStructure.CAN_BS1 = CAN_BS1_4tq; |
| 177 | CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq; |
| 178 | break; |
| 179 | case LS1C_CAN800kBaud: |
| 180 | CAN_InitStructure.CAN_Prescaler = 8; |