ESP32 CAN

来自Jack's Lab
(版本间的差异)
跳转到: 导航, 搜索
(以“== Overview == <br><br> == Hacking == <br><br><br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br> <br><br>”为内容创建页面)
 
(Pin)
 
(未显示1个用户的4个中间版本)
第5行: 第5行:
 
== Hacking ==
 
== Hacking ==
  
<br><br><br><br>
+
=== Pin ===
 +
 
 +
Need to call the gpio_matrix_out()/gpio_matrix_in() to setup the gpio matrix:
 +
 
 +
<source lang=cpp>
 +
/*
 +
  * @brief set gpio input to a signal, one gpio can input to several signals.
 +
  * @param uint32_t gpio : gpio number, 0~0x27
 +
  * @param uint32_t signal_idx : signal index.
 +
  * @param bool inv : the signal is inv or not
 +
  * @return None
 +
  */
 +
void gpio_matrix_in(uint32_t gpio, uint32_t signal_idx, bool inv);
 +
 
 +
/*
 +
  * @brief set signal output to gpio, one signal can output to several gpios.
 +
  * @param uint32_t gpio : gpio number, 0~0x27
 +
  * @param uint32_t signal_idx : signal index.
 +
  *                        signal_idx == 0x100, cancel output put to the gpio
 +
  * @param bool out_inv : the signal output is inv or not
 +
  * @param bool oen_inv : the signal output enable is inv or not
 +
  */
 +
void gpio_matrix_out(uint32_t gpio, uint32_t signal_idx, bool out_inv, bool oen_inv);
 +
</source>
 +
 
 +
The signal_idx of CAN is in components/esp32/include/soc/gpio_sig_map.h:
 +
 
 +
<pre>
 +
#define CAN_RX_IDX  94
 +
#define CAN_TX_IDX  123
 +
#define CAN_BUS_OFF_ON_IDX  124
 +
#define CAN_CLKOUT_IDX  125
 +
</pre>
 +
 
 +
<br><br>
 +
 
 +
=== Registers ===
 +
 
 +
<pre>
 +
#define DPORT_PRO_CAN_INT_MAP_REG          (DR_REG_DPORT_BASE + 0x1B8)
 +
/* DPORT_PRO_CAN_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */
 +
/*description: */
 +
#define DPORT_PRO_CAN_INT_MAP  0x0000001F
 +
#define DPORT_PRO_CAN_INT_MAP_M  ((DPORT_PRO_CAN_INT_MAP_V)<<(DPORT_PRO_CAN_INT_MAP_S))
 +
#define DPORT_PRO_CAN_INT_MAP_V  0x1F
 +
#define DPORT_PRO_CAN_INT_MAP_S  0
 +
 
 +
#define DPORT_APP_CAN_INT_MAP_REG          (DR_REG_DPORT_BASE + 0x2CC)
 +
/* DPORT_APP_CAN_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */
 +
/*description: */
 +
#define DPORT_APP_CAN_INT_MAP  0x0000001F
 +
#define DPORT_APP_CAN_INT_MAP_M  ((DPORT_APP_CAN_INT_MAP_V)<<(DPORT_APP_CAN_INT_MAP_S))
 +
#define DPORT_APP_CAN_INT_MAP_V  0x1F
 +
#define DPORT_APP_CAN_INT_MAP_S  0
 +
 
 +
#define DPORT_AHBLITE_MPU_TABLE_CAN_REG          (DR_REG_DPORT_BASE + 0x3C0)
 +
/* DPORT_CAN_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */
 +
/*description: */
 +
#define DPORT_CAN_ACCESS_GRANT_CONFIG  0x0000003F
 +
#define DPORT_CAN_ACCESS_GRANT_CONFIG_M  ((DPORT_CAN_ACCESS_GRANT_CONFIG_V)<<(DPORT_CAN_ACCESS_GRANT_CONFIG_S))
 +
#define DPORT_CAN_ACCESS_GRANT_CONFIG_V  0x3F
 +
#define DPORT_CAN_ACCESS_GRANT_CONFIG_S  0
 +
</pre>
 +
 
 +
<br><br>
 +
 
 +
== Reference ==
 +
 
 +
* http://www.esp32.com/viewtopic.php?f=12&t=380&start=10
 +
 
 +
<br><br>
 
<br><br>
 
<br><br>
 
<br><br>
 
<br><br>

2016年11月23日 (三) 22:52的最后版本

目录

[编辑] 1 Overview



[编辑] 2 Hacking

[编辑] 2.1 Pin

Need to call the gpio_matrix_out()/gpio_matrix_in() to setup the gpio matrix:

/*
  * @brief set gpio input to a signal, one gpio can input to several signals.
  * @param uint32_t gpio : gpio number, 0~0x27
  * @param uint32_t signal_idx : signal index.
  * @param bool inv : the signal is inv or not
  * @return None
  */
void gpio_matrix_in(uint32_t gpio, uint32_t signal_idx, bool inv);

/*
  * @brief set signal output to gpio, one signal can output to several gpios.
  * @param uint32_t gpio : gpio number, 0~0x27
  * @param uint32_t signal_idx : signal index.
  *                        signal_idx == 0x100, cancel output put to the gpio
  * @param bool out_inv : the signal output is inv or not
  * @param bool oen_inv : the signal output enable is inv or not
  */
void gpio_matrix_out(uint32_t gpio, uint32_t signal_idx, bool out_inv, bool oen_inv);

The signal_idx of CAN is in components/esp32/include/soc/gpio_sig_map.h:

#define CAN_RX_IDX   94
#define CAN_TX_IDX   123
#define CAN_BUS_OFF_ON_IDX   124
#define CAN_CLKOUT_IDX   125



[编辑] 2.2 Registers

#define DPORT_PRO_CAN_INT_MAP_REG          (DR_REG_DPORT_BASE + 0x1B8)
/* DPORT_PRO_CAN_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */
/*description: */
#define DPORT_PRO_CAN_INT_MAP  0x0000001F
#define DPORT_PRO_CAN_INT_MAP_M  ((DPORT_PRO_CAN_INT_MAP_V)<<(DPORT_PRO_CAN_INT_MAP_S))
#define DPORT_PRO_CAN_INT_MAP_V  0x1F
#define DPORT_PRO_CAN_INT_MAP_S  0

#define DPORT_APP_CAN_INT_MAP_REG          (DR_REG_DPORT_BASE + 0x2CC)
/* DPORT_APP_CAN_INT_MAP : R/W ;bitpos:[4:0] ;default: 5'd16 ; */
/*description: */
#define DPORT_APP_CAN_INT_MAP  0x0000001F
#define DPORT_APP_CAN_INT_MAP_M  ((DPORT_APP_CAN_INT_MAP_V)<<(DPORT_APP_CAN_INT_MAP_S))
#define DPORT_APP_CAN_INT_MAP_V  0x1F
#define DPORT_APP_CAN_INT_MAP_S  0

#define DPORT_AHBLITE_MPU_TABLE_CAN_REG          (DR_REG_DPORT_BASE + 0x3C0)
/* DPORT_CAN_ACCESS_GRANT_CONFIG : R/W ;bitpos:[5:0] ;default: 6'b0 ; */
/*description: */
#define DPORT_CAN_ACCESS_GRANT_CONFIG  0x0000003F
#define DPORT_CAN_ACCESS_GRANT_CONFIG_M  ((DPORT_CAN_ACCESS_GRANT_CONFIG_V)<<(DPORT_CAN_ACCESS_GRANT_CONFIG_S))
#define DPORT_CAN_ACCESS_GRANT_CONFIG_V  0x3F
#define DPORT_CAN_ACCESS_GRANT_CONFIG_S  0



[编辑] 3 Reference























个人工具
名字空间

变换
操作
导航
工具箱