1 /** 2 * 3 * Copyright (c) 2019 Microchip Technology Inc. and its subsidiaries. 4 * 5 * \asf_license_start 6 * 7 * \page License 8 * 9 * SPDX-License-Identifier: Apache-2.0 10 * 11 * Licensed under the Apache License, Version 2.0 (the "License"); you may 12 * not use this file except in compliance with the License. 13 * You may obtain a copy of the Licence at 14 * 15 * http://www.apache.org/licenses/LICENSE-2.0 16 * 17 * Unless required by applicable law or agreed to in writing, software 18 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20 * See the License for the specific language governing permissions and 21 * limitations under the License. 22 * 23 * \asf_license_stop 24 * 25 */ 26 27 /** @file ps2_ctrl.h 28 *MEC1501 PS/2 Controller Registers 29 */ 30 /** @defgroup MEC1501 Peripherals PS/2 31 */ 32 33 #ifndef _PS2_CTRL_H 34 #define _PS2_CTRL_H 35 36 #include <stdint.h> 37 #include <stddef.h> 38 39 #include "regaccess.h" 40 41 /* ===================================================================*/ 42 /* ================ PS2 ============= */ 43 /* ===================================================================*/ 44 45 #define MCHP_PS2_MAX_INSTANCES 2u 46 #define MCHP_PS2_SPACING 0x40u 47 #define MCHP_PS2_SPACING_PWROF2 6u 48 49 #define MCHP_PS2_0_BASE_ADDR 0x40009000u 50 #define MCHP_PS2_1_BASE_ADDR 0x40009040u 51 52 /* 53 * PS2 interrupts 54 */ 55 #define MCHP_PS2_0_GIRQ 18u 56 #define MCHP_PS2_1_GIRQ 18u 57 #define MCHP_PS2_0_GIRQ_NVIC 10u 58 #define MCHP_PS2_1_GIRQ_NVIC 10u 59 #define MCHP_PS2_0_NVIC_DIRECT 100u 60 #define MCHP_PS2_1_NVIC_DIRECT 101u 61 62 #define MCHP_PS2_0_GIRQ_POS 10u 63 #define MCHP_PS2_1_GIRQ_POS 11u 64 65 #define MCHP_PS2_0_GIRQ_VAL (1u << 10) 66 #define MCHP_PS2_1_GIRQ_VAL (1u << 11) 67 68 /* 69 * PS2 TRX Buffer register 70 * Writes -> Transmit buffer 71 * Read <- Receive buffer 72 */ 73 #define MCHP_PS2_TRX_BUFF_REG_MASK 0xffu 74 75 /* 76 * PS2 Control register 77 */ 78 #define MCHP_PS2_CTRL_REG_MASK 0x3fu 79 80 /* Select Transmit or Receive */ 81 #define MCHP_PS2_CTRL_TR_POS 0 82 #define MCHP_PS2_CTRL_TR_RX (0U << (MCHP_PS2_CTRL_TR_POS)) 83 #define MCHP_PS2_CTRL_TR_TX (1U << (MCHP_PS2_CTRL_TR_POS)) 84 85 /* Enable PS2 state machine */ 86 #define MCHP_PS2_CTRL_EN_POS 1 87 #define MCHP_PS2_CTRL_EN (1U << (MCHP_PS2_CTRL_EN_POS)) 88 89 /* Protocol parity selection */ 90 #define MCHP_PS2_CTRL_PAR_POS 2 91 #define MCHP_PS2_CTRL_PAR_MASK0 0x03u 92 #define MCHP_PS2_CTRL_PAR_MASK ((MCHP_PS2_CTRL_PAR_MASK0) \ 93 << (MCHP_PS2_CTRL_PAR_POS)) 94 #define MCHP_PS2_CTRL_PAR_ODD (0U << (MCHP_PS2_CTRL_PAR_POS)) 95 #define MCHP_PS2_CTRL_PAR_EVEN (1U << (MCHP_PS2_CTRL_PAR_POS)) 96 #define MCHP_PS2_CTRL_PAR_IGNORE (2U << (MCHP_PS2_CTRL_PAR_POS)) 97 #define MCHP_PS2_CTRL_PAR_RSVD (3U << (MCHP_PS2_CTRL_PAR_POS)) 98 99 /* Protocol stop bit selection */ 100 #define MCHP_PS2_CTRL_STOP_POS 4 101 #define MCHP_PS2_CTRL_STOP_MASK0 0x03u 102 #define MCHP_PS2_CTRL_STOP_MASK ((MCHP_PS2_CTRL_STOP_MASK0) \ 103 << (MCHP_PS2_CTRL_STOP_POS)) 104 #define MCHP_PS2_CTRL_STOP_ACT_HI (0U << (MCHP_PS2_CTRL_STOP_POS)) 105 #define MCHP_PS2_CTRL_STOP_ACT_LO (1U << (MCHP_PS2_CTRL_STOP_POS)) 106 #define MCHP_PS2_CTRL_STOP_IGNORE (2U << (MCHP_PS2_CTRL_STOP_POS)) 107 #define MCHP_PS2_CTRL_STOP_RSVD (3U << (MCHP_PS2_CTRL_STOP_POS)) 108 109 /* 110 * PS2 Status register 111 */ 112 #define MCHP_PS2_STATUS_REG_MASK 0xffu 113 #define MCHP_PS2_STATUS_RW1C_MASK 0xaeu 114 #define MCHP_PS2_STATUS_RO_MASK 0x51u 115 /* RX Data Ready(Read-Only) */ 116 #define MCHP_PS2_STATUS_RXD_RDY_POS 0 117 #define MCHP_PS2_STATUS_RXD_RDY (1U << (MCHP_PS2_STATUS_RXD_RDY_POS)) 118 /* RX Timeout(R/W1C) */ 119 #define MCHP_PS2_STATUS_RX_TMOUT_POS 1 120 #define MCHP_PS2_STATUS_RX_TMOUT (1U << (MCHP_PS2_STATUS_RX_TMOUT_POS)) 121 /* Parity Error(R/W1C) */ 122 #define MCHP_PS2_STATUS_PE_POS 2 123 #define MCHP_PS2_STATUS_PE (1U << (MCHP_PS2_STATUS_PE_POS)) 124 /* Framing Error(R/W1C) */ 125 #define MCHP_PS2_STATUS_FE_POS 3 126 #define MCHP_PS2_STATUS_FE (1U << (MCHP_PS2_STATUS_FE_POS)) 127 /* Transmitter is Idle(Read-Only) */ 128 #define MCHP_PS2_STATUS_TX_IDLE_POS 4 129 #define MCHP_PS2_STATUS_TX_IDLE (1U << (MCHP_PS2_STATUS_TX_IDLE_POS)) 130 /* Transmitter timeout(R/W1C) */ 131 #define MCHP_PS2_STATUS_TX_TMOUT_POS 5 132 #define MCHP_PS2_STATUS_TX_TMOUT (1U << (MCHP_PS2_STATUS_TX_TMOUT_POS)) 133 /* RX is Busy(Read-Only) */ 134 #define MCHP_PS2_STATUS_RX_BUSY_POS 6 135 #define MCHP_PS2_STATUS_RX_BUSY (1U << (MCHP_PS2_STATUS_RX_BUSY_POS)) 136 /* Transmitter start timeout(R/W1C) */ 137 #define MCHP_PS2_STATUS_TX_ST_TMOUT_POS 7 138 #define MCHP_PS2_STATUS_TX_ST_TMOUT (1U << (MCHP_PS2_STATUS_TX_ST_TMOUT_POS)) 139 140 /* 141 * PS2 Protocol bit positions 142 */ 143 #define MCHP_PS2_PROT_START_BIT_POS 1 144 #define MCHP_PS2_PROT_DATA_BIT0_POS 2 145 #define MCHP_PS2_PROT_DATA_BIT1_POS 3 146 #define MCHP_PS2_PROT_DATA_BIT2_POS 4 147 #define MCHP_PS2_PROT_DATA_BIT3_POS 5 148 #define MCHP_PS2_PROT_DATA_BIT4_POS 6 149 #define MCHP_PS2_PROT_DATA_BIT5_POS 7 150 #define MCHP_PS2_PROT_DATA_BIT6_POS 8 151 #define MCHP_PS2_PROT_DATA_BIT7_POS 9 152 #define MCHP_PS2_PROT_PARITY_POS 10 153 #define MCHP_PS2_PROT_STOP_BIT_POS 11 154 155 /** 156 * @brief PS/2 Controller Registers (PS2) 157 */ 158 typedef struct ps2_regs 159 { 160 __IOM uint32_t TRX_BUFF; /*!< (@ 0x0000) PS/2 Transmit buffer(WO), Receive buffer(RO) */ 161 __IOM uint32_t CTRL; /*!< (@ 0x0004) PS/2 Control */ 162 __IOM uint32_t STATUS; /*!< (@ 0x0008) PS/2 Status */ 163 } PS2_Type; 164 165 #endif /* #ifndef _PS2_CTRL_H */ 166 /* end ps2_ctrl.h */ 167 /** @} 168 */ 169