github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/src/machine/board_matrixportal-m4.go (about)

     1  //go:build matrixportal_m4
     2  
     3  package machine
     4  
     5  // used to reset into bootloader
     6  const resetMagicValue = 0xF01669EF
     7  
     8  // Digital pins
     9  const (
    10  	//    Pin   // Function          SERCOM  PWM  Interrupt
    11  	//    ----  // ----------------  ------  ---  ---------
    12  	D0  = PA01  // UART RX            1[1]   PWM  EXTI1
    13  	D1  = PA00  // UART TX            1[0]   PWM  EXTI0
    14  	D2  = PB22  // Button "Up"                    EXTI6
    15  	D3  = PB23  // Button "Down"                  EXTI7
    16  	D4  = PA23  // NeoPixel                       EXTI7
    17  	D5  = PB31  // I2C SDA            5[1]        EXTI15
    18  	D6  = PB30  // I2C SCL            5[0]        EXTI14
    19  	D7  = PB00  // HUB75 R1                       EXTI0
    20  	D8  = PB01  // HUB75 G1                       EXTI1
    21  	D9  = PB02  // HUB75 B1                       EXTI2
    22  	D10 = PB03  // HUB75 R2                       EXTI3
    23  	D11 = PB04  // HUB75 G2                       EXTI4
    24  	D12 = PB05  // HUB75 B2                       EXTI5
    25  	D13 = PA14  // LED                       PWM  EXTI14
    26  	D14 = PB06  // HUB75 CLK                      EXTI6
    27  	D15 = PB14  // HUB75 LAT                      EXTI14
    28  	D16 = PB12  // HUB75 OE                       EXTI12
    29  	D17 = PB07  // HUB75 ADDR A                   EXTI7
    30  	D18 = PB08  // HUB75 ADDR B                   EXTI8
    31  	D19 = PB09  // HUB75 ADDR C                   EXTI9
    32  	D20 = PB15  // HUB75 ADDR D                   EXTI15
    33  	D21 = PB13  // HUB75 ADDR E                   EXTI13
    34  	D22 = PA02  // ADC (A0)                       EXTI2
    35  	D23 = PA05  // ADC (A1)                       EXTI5
    36  	D24 = PA04  // ADC (A2)                  PWM  EXTI4
    37  	D25 = PA06  // ADC (A3)                  PWM  EXTI6
    38  	D26 = PA07  // ADC (A4)                       EXTI7
    39  	D27 = PA12  // ESP32 UART RX      4[1]   PWM  EXTI12
    40  	D28 = PA13  // ESP32 UART TX      4[0]   PWM  EXTI13
    41  	D29 = PA20  // ESP32 GPIO0               PWM  EXTI4
    42  	D30 = PA21  // ESP32 Reset               PWM  EXTI5
    43  	D31 = PA22  // ESP32 Busy                PWM  EXTI6
    44  	D32 = PA18  // ESP32 RTS                 PWM  EXTI2
    45  	D33 = PB17  // ESP32 SPI CS              PWM  EXTI1
    46  	D34 = PA16  // ESP32 SPI SCK      3[1]   PWM  EXTI0
    47  	D35 = PA17  // ESP32 SPI SDI      3[0]   PWM  EXTI1
    48  	D36 = PA19  // ESP32 SPI SDO      1[3]   PWM  EXTI3
    49  	D37 = NoPin // USB Host enable
    50  	D38 = PA24  // USB DM
    51  	D39 = PA25  // USB DP
    52  	D40 = PA03  // DAC/VREFP
    53  	D41 = PB10  // Flash QSPI SCK
    54  	D42 = PB11  // Flash QSPI CS
    55  	D43 = PA08  // Flash QSPI I00
    56  	D44 = PA09  // Flash QSPI IO1
    57  	D45 = PA10  // Flash QSPI IO2
    58  	D46 = PA11  // Flash QSPI IO3
    59  	D47 = PA27  // LIS3DH IRQ                     EXTI11
    60  	D48 = PA05  // SPI SCK            0[1]        EXTI5
    61  	D49 = PA04  // SPI SDO            0[0]   PWM  EXTI4
    62  	D50 = PA07  // SPI SDI            0[3]        EXTI7
    63  )
    64  
    65  // Analog pins
    66  const (
    67  	A0 = PA02 // ADC Channel 0
    68  	A1 = PA05 // ADC Channel 5
    69  	A2 = PA04 // ADC Channel 4
    70  	A3 = PA06 // ADC Channel 6
    71  	A4 = PA07 // ADC Channel 7
    72  )
    73  
    74  // LED pins
    75  const (
    76  	LED      = D13
    77  	NEOPIXEL = D4
    78  	WS2812   = D4
    79  )
    80  
    81  // Button pins
    82  const (
    83  	BUTTON_UP   = D2
    84  	BUTTON_DOWN = D3
    85  )
    86  
    87  // UART pins
    88  const (
    89  	UART1_RX_PIN = D0 // SERCOM1[1]
    90  	UART1_TX_PIN = D1 // SERCOM1[0]
    91  
    92  	UART2_RX_PIN = D27 // SERCOM4[1] (ESP32 RX)
    93  	UART2_TX_PIN = D28 // SERCOM4[0] (ESP32 TX)
    94  
    95  	UART_RX_PIN = UART1_RX_PIN
    96  	UART_TX_PIN = UART1_TX_PIN
    97  )
    98  
    99  // UART on the MatrixPortal M4
   100  var (
   101  	UART1 = &sercomUSART1
   102  	UART2 = &sercomUSART4
   103  
   104  	DefaultUART = UART1
   105  )
   106  
   107  // SPI pins
   108  const (
   109  	SPI0_SCK_PIN = D34 // SERCOM3[1] (ESP32 SCK)
   110  	SPI0_SDO_PIN = D36 // SERCOM1[3] (ESP32 SDO)
   111  	SPI0_SDI_PIN = D35 // SERCOM3[0] (ESP32 SDI)
   112  
   113  	SPI1_SCK_PIN = D48 // SERCOM0[1]
   114  	SPI1_SDO_PIN = D49 // SERCOM0[0]
   115  	SPI1_SDI_PIN = D50 // SERCOM0[3]
   116  
   117  	SPI_SCK_PIN = SPI0_SCK_PIN
   118  	SPI_SDO_PIN = SPI0_SDO_PIN
   119  	SPI_SDI_PIN = SPI0_SDI_PIN
   120  )
   121  
   122  // I2C pins
   123  const (
   124  	I2C0_SDA_PIN = D5 // SERCOM5[1]
   125  	I2C0_SCL_PIN = D6 // SERCOM5[0]
   126  
   127  	I2C_SDA_PIN = I2C0_SDA_PIN
   128  	I2C_SCL_PIN = I2C0_SCL_PIN
   129  
   130  	SDA_PIN = I2C_SDA_PIN // awkward naming required by machine_atsamd51.go
   131  	SCL_PIN = I2C_SCL_PIN //
   132  )
   133  
   134  // I2C on the MatrixPortal M4
   135  var (
   136  	I2C0 = sercomI2CM5
   137  )
   138  
   139  // ESP32 pins
   140  const (
   141  	NINA_ACK    = D31
   142  	NINA_GPIO0  = D29
   143  	NINA_RESETN = D30
   144  
   145  	NINA_RX  = UART2_RX_PIN
   146  	NINA_TX  = UART2_TX_PIN
   147  	NINA_RTS = D32
   148  
   149  	NINA_CS  = D33
   150  	NINA_SDO = SPI0_SDO_PIN
   151  	NINA_SDI = SPI0_SDI_PIN
   152  	NINA_SCK = SPI0_SCK_PIN
   153  )
   154  
   155  // SPI on the MatrixPortal M4
   156  var (
   157  	SPI0     = sercomSPIM3 // BUG: SDO on SERCOM1!
   158  	NINA_SPI = SPI0
   159  
   160  	SPI1 = sercomSPIM0
   161  )
   162  
   163  // HUB75 pins
   164  const (
   165  	HUB75_R1 = D7
   166  	HUB75_G1 = D8
   167  	HUB75_B1 = D9
   168  	HUB75_R2 = D10
   169  	HUB75_G2 = D11
   170  	HUB75_B2 = D12
   171  
   172  	HUB75_CLK    = D14
   173  	HUB75_LAT    = D15
   174  	HUB75_OE     = D16
   175  	HUB75_ADDR_A = D17
   176  	HUB75_ADDR_B = D18
   177  	HUB75_ADDR_C = D19
   178  	HUB75_ADDR_D = D20
   179  	HUB75_ADDR_E = D21
   180  )
   181  
   182  // USB CDC pins (UART0)
   183  const (
   184  	USBCDC_DM_PIN = D38
   185  	USBCDC_DP_PIN = D39
   186  
   187  	UART0_RX_PIN = USBCDC_DM_PIN
   188  	UART0_TX_PIN = USBCDC_DP_PIN
   189  )
   190  
   191  // USB CDC identifiers
   192  const (
   193  	usb_STRING_PRODUCT      = "Matrix Portal M4"
   194  	usb_STRING_MANUFACTURER = "Adafruit Industries"
   195  )
   196  
   197  var (
   198  	usb_VID uint16 = 0x239A
   199  	usb_PID uint16 = 0x80C9
   200  )