qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

board.c (7974B)


      1 /*
      2     ChibiOS - Copyright (C) 2015 RedoX https://github.com/RedoXyde
      3 
      4     Licensed under the Apache License, Version 2.0 (the "License");
      5     you may not use this file except in compliance with the License.
      6     You may obtain a copy of the License at
      7 
      8         http://www.apache.org/licenses/LICENSE-2.0
      9 
     10     Unless required by applicable law or agreed to in writing, software
     11     distributed under the License is distributed on an "AS IS" BASIS,
     12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13     See the License for the specific language governing permissions and
     14     limitations under the License.
     15 */
     16 #include <hal.h>
     17 
     18 #if HAL_USE_PAL || defined(__DOXYGEN__)
     19 /**
     20  * @brief   PAL setup.
     21  * @details Digital I/O ports static configuration as defined in @p board.h.
     22  *          This variable is used by the HAL when initializing the PAL driver.
     23  */
     24 const PALConfig pal_default_config = {
     25     .ports =
     26         {
     27             {
     28                 /*
     29                  * PORTA setup.
     30                  *
     31                  * PTA4  - PIN33
     32                  * PTA5  - PIN24
     33                  * PTA12 - PIN3
     34                  * PTA13 - PIN4
     35                  *
     36                  * PTA18/19 crystal
     37                  * PTA0/3 SWD
     38                  */
     39                 .port = IOPORT1,
     40                 .pads =
     41                     {
     42                         PAL_MODE_ALTERNATIVE_7, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_ALTERNATIVE_7, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_INPUT_ANALOG, PAL_MODE_INPUT_ANALOG, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
     43                     },
     44             },
     45             {
     46                 /*
     47                  * PORTB setup.
     48                  *
     49                  * PTB0  - PIN16
     50                  * PTB1  - PIN17
     51                  * PTB2  - PIN19
     52                  * PTB3  - PIN18
     53                  * PTB16 - PIN0 - UART0_TX
     54                  * PTB17 - PIN1 - UART0_RX
     55                  * PTB18 - PIN32
     56                  * PTB19 - PIN25
     57                  */
     58                 .port = IOPORT2,
     59                 .pads =
     60                     {
     61                         PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_ALTERNATIVE_3, PAL_MODE_ALTERNATIVE_3, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
     62                     },
     63             },
     64             {
     65                 /*
     66                  * PORTC setup.
     67                  *
     68                  * PTC0  - PIN15
     69                  * PTC1  - PIN22
     70                  * PTC2  - PIN23
     71                  * PTC3  - PIN9
     72                  * PTC4  - PIN10
     73                  * PTC5  - PIN13
     74                  * PTC6  - PIN11
     75                  * PTC7  - PIN12
     76                  * PTC8  - PIN28
     77                  * PTC9  - PIN27
     78                  * PTC10 - PIN29
     79                  * PTC11 - PIN30
     80                  */
     81                 .port = IOPORT3,
     82                 .pads =
     83                     {
     84                         PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
     85                     },
     86             },
     87             {
     88                 /*
     89                  * PORTD setup.
     90                  *
     91                  * PTD0  - PIN2
     92                  * PTD1  - PIN14
     93                  * PTD2  - PIN7
     94                  * PTD3  - PIN8
     95                  * PTD4  - PIN6
     96                  * PTD5  - PIN20
     97                  * PTD6  - PIN21
     98                  * PTD7  - PIN5
     99                  */
    100                 .port = IOPORT4,
    101                 .pads =
    102                     {
    103                         PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
    104                     },
    105             },
    106             {
    107                 /*
    108                  * PORTE setup.
    109                  *
    110                  * PTE0  - PIN31
    111                  * PTE1  - PIN26
    112                  */
    113                 .port = IOPORT5,
    114                 .pads =
    115                     {
    116                         PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_OUTPUT_PUSHPULL, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED, PAL_MODE_UNCONNECTED,
    117                     },
    118             },
    119         },
    120 };
    121 #endif
    122 
    123 // NOTE: This value comes from kiibohd/controller and is the location of a value
    124 // which needs to be checked before disabling the watchdog (which happens in
    125 // k20x_clock_init)
    126 #define WDOG_TMROUTL *(volatile uint16_t *)0x40052012
    127 
    128 /**
    129  * @brief   Early initialization code.
    130  * @details This initialization must be performed just after stack setup
    131  *          and before any other initialization.
    132  */
    133 void __early_init(void) {
    134     // This is a dirty hack and should only be used as a temporary fix until this
    135     // is upstreamed.
    136     while (WDOG_TMROUTL < 2)
    137         ;  // Must wait for WDOG timer if already running, before jumping
    138 
    139     k20x_clock_init();
    140 }
    141 
    142 /**
    143  * @brief   Board-specific initialization code.
    144  * @todo    Add your board-specific code, if any.
    145  */
    146 void boardInit(void) {}
    147 
    148 
    149 void restart_usb_driver(USBDriver *usbp) {
    150   // Do nothing. Restarting the USB driver on these boards breaks it.
    151 }