added prescaler for 16 bit pwm in LPC1347 target
Fork of mbed-dev by
targets/hal/TARGET_Atmel/TARGET_SAM_CortexM4/drivers/twi/twi.h@147:ba84b7dc41a7, 2016-09-10 (annotated)
- Committer:
- JojoS
- Date:
- Sat Sep 10 15:32:04 2016 +0000
- Revision:
- 147:ba84b7dc41a7
- Parent:
- 107:414e9c822e99
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 107:414e9c822e99 | 1 | /** |
mbed_official | 107:414e9c822e99 | 2 | * \file |
mbed_official | 107:414e9c822e99 | 3 | * |
mbed_official | 107:414e9c822e99 | 4 | * \brief Two-Wire Interface (TWI) driver for SAM. |
mbed_official | 107:414e9c822e99 | 5 | * |
mbed_official | 107:414e9c822e99 | 6 | * Copyright (c) 2011-2015 Atmel Corporation. All rights reserved. |
mbed_official | 107:414e9c822e99 | 7 | * |
mbed_official | 107:414e9c822e99 | 8 | * \asf_license_start |
mbed_official | 107:414e9c822e99 | 9 | * |
mbed_official | 107:414e9c822e99 | 10 | * \page License |
mbed_official | 107:414e9c822e99 | 11 | * |
mbed_official | 107:414e9c822e99 | 12 | * Redistribution and use in source and binary forms, with or without |
mbed_official | 107:414e9c822e99 | 13 | * modification, are permitted provided that the following conditions are met: |
mbed_official | 107:414e9c822e99 | 14 | * |
mbed_official | 107:414e9c822e99 | 15 | * 1. Redistributions of source code must retain the above copyright notice, |
mbed_official | 107:414e9c822e99 | 16 | * this list of conditions and the following disclaimer. |
mbed_official | 107:414e9c822e99 | 17 | * |
mbed_official | 107:414e9c822e99 | 18 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
mbed_official | 107:414e9c822e99 | 19 | * this list of conditions and the following disclaimer in the documentation |
mbed_official | 107:414e9c822e99 | 20 | * and/or other materials provided with the distribution. |
mbed_official | 107:414e9c822e99 | 21 | * |
mbed_official | 107:414e9c822e99 | 22 | * 3. The name of Atmel may not be used to endorse or promote products derived |
mbed_official | 107:414e9c822e99 | 23 | * from this software without specific prior written permission. |
mbed_official | 107:414e9c822e99 | 24 | * |
mbed_official | 107:414e9c822e99 | 25 | * 4. This software may only be redistributed and used in connection with an |
mbed_official | 107:414e9c822e99 | 26 | * Atmel microcontroller product. |
mbed_official | 107:414e9c822e99 | 27 | * |
mbed_official | 107:414e9c822e99 | 28 | * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED |
mbed_official | 107:414e9c822e99 | 29 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
mbed_official | 107:414e9c822e99 | 30 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE |
mbed_official | 107:414e9c822e99 | 31 | * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR |
mbed_official | 107:414e9c822e99 | 32 | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
mbed_official | 107:414e9c822e99 | 33 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
mbed_official | 107:414e9c822e99 | 34 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
mbed_official | 107:414e9c822e99 | 35 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
mbed_official | 107:414e9c822e99 | 36 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
mbed_official | 107:414e9c822e99 | 37 | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
mbed_official | 107:414e9c822e99 | 38 | * POSSIBILITY OF SUCH DAMAGE. |
mbed_official | 107:414e9c822e99 | 39 | * |
mbed_official | 107:414e9c822e99 | 40 | * \asf_license_stop |
mbed_official | 107:414e9c822e99 | 41 | * |
mbed_official | 107:414e9c822e99 | 42 | */ |
mbed_official | 107:414e9c822e99 | 43 | /* |
mbed_official | 107:414e9c822e99 | 44 | * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a> |
mbed_official | 107:414e9c822e99 | 45 | */ |
mbed_official | 107:414e9c822e99 | 46 | |
mbed_official | 107:414e9c822e99 | 47 | #ifndef TWI_H_INCLUDED |
mbed_official | 107:414e9c822e99 | 48 | #define TWI_H_INCLUDED |
mbed_official | 107:414e9c822e99 | 49 | |
mbed_official | 107:414e9c822e99 | 50 | #include "compiler.h" |
mbed_official | 107:414e9c822e99 | 51 | |
mbed_official | 107:414e9c822e99 | 52 | /// @cond 0 |
mbed_official | 107:414e9c822e99 | 53 | /**INDENT-OFF**/ |
mbed_official | 107:414e9c822e99 | 54 | #ifdef __cplusplus |
mbed_official | 107:414e9c822e99 | 55 | extern "C" { |
mbed_official | 107:414e9c822e99 | 56 | #endif |
mbed_official | 107:414e9c822e99 | 57 | /**INDENT-ON**/ |
mbed_official | 107:414e9c822e99 | 58 | /// @endcond |
mbed_official | 107:414e9c822e99 | 59 | |
mbed_official | 107:414e9c822e99 | 60 | /** Time-out value (number of attempts). */ |
mbed_official | 107:414e9c822e99 | 61 | #define TWI_TIMEOUT 15000 |
mbed_official | 107:414e9c822e99 | 62 | |
mbed_official | 107:414e9c822e99 | 63 | /** |
mbed_official | 107:414e9c822e99 | 64 | * \brief Return codes for TWI APIs. |
mbed_official | 107:414e9c822e99 | 65 | * @{ |
mbed_official | 107:414e9c822e99 | 66 | */ |
mbed_official | 107:414e9c822e99 | 67 | #define TWI_SUCCESS 0 |
mbed_official | 107:414e9c822e99 | 68 | #define TWI_INVALID_ARGUMENT 1 |
mbed_official | 107:414e9c822e99 | 69 | #define TWI_ARBITRATION_LOST 2 |
mbed_official | 107:414e9c822e99 | 70 | #define TWI_NO_CHIP_FOUND 3 |
mbed_official | 107:414e9c822e99 | 71 | #define TWI_RECEIVE_OVERRUN 4 |
mbed_official | 107:414e9c822e99 | 72 | #define TWI_RECEIVE_NACK 5 |
mbed_official | 107:414e9c822e99 | 73 | #define TWI_SEND_OVERRUN 6 |
mbed_official | 107:414e9c822e99 | 74 | #define TWI_SEND_NACK 7 |
mbed_official | 107:414e9c822e99 | 75 | #define TWI_BUSY 8 |
mbed_official | 107:414e9c822e99 | 76 | #define TWI_ERROR_TIMEOUT 9 |
mbed_official | 107:414e9c822e99 | 77 | /** |
mbed_official | 107:414e9c822e99 | 78 | * @} |
mbed_official | 107:414e9c822e99 | 79 | */ |
mbed_official | 107:414e9c822e99 | 80 | |
mbed_official | 107:414e9c822e99 | 81 | /** |
mbed_official | 107:414e9c822e99 | 82 | * \brief Input parameters when initializing the TWI module mode. |
mbed_official | 107:414e9c822e99 | 83 | */ |
mbed_official | 107:414e9c822e99 | 84 | typedef struct twi_options { |
mbed_official | 107:414e9c822e99 | 85 | //! MCK for TWI. |
mbed_official | 107:414e9c822e99 | 86 | uint32_t master_clk; |
mbed_official | 107:414e9c822e99 | 87 | //! The baud rate of the TWI bus. |
mbed_official | 107:414e9c822e99 | 88 | uint32_t speed; |
mbed_official | 107:414e9c822e99 | 89 | //! The desired address. |
mbed_official | 107:414e9c822e99 | 90 | uint8_t chip; |
mbed_official | 107:414e9c822e99 | 91 | //! SMBUS mode (set 1 to use SMBUS quick command, otherwise don't). |
mbed_official | 107:414e9c822e99 | 92 | uint8_t smbus; |
mbed_official | 107:414e9c822e99 | 93 | } twi_options_t; |
mbed_official | 107:414e9c822e99 | 94 | |
mbed_official | 107:414e9c822e99 | 95 | /** |
mbed_official | 107:414e9c822e99 | 96 | * \brief Information concerning the data transmission. |
mbed_official | 107:414e9c822e99 | 97 | */ |
mbed_official | 107:414e9c822e99 | 98 | typedef struct twi_packet { |
mbed_official | 107:414e9c822e99 | 99 | //! TWI address/commands to issue to the other chip (node). |
mbed_official | 107:414e9c822e99 | 100 | uint8_t addr[3]; |
mbed_official | 107:414e9c822e99 | 101 | //! Length of the TWI data address segment (1-3 bytes). |
mbed_official | 107:414e9c822e99 | 102 | uint32_t addr_length; |
mbed_official | 107:414e9c822e99 | 103 | //! Where to find the data to be transferred. |
mbed_official | 107:414e9c822e99 | 104 | void *buffer; |
mbed_official | 107:414e9c822e99 | 105 | //! How many bytes do we want to transfer. |
mbed_official | 107:414e9c822e99 | 106 | uint32_t length; |
mbed_official | 107:414e9c822e99 | 107 | //! TWI chip address to communicate with. |
mbed_official | 107:414e9c822e99 | 108 | uint8_t chip; |
mbed_official | 107:414e9c822e99 | 109 | } twi_packet_t; |
mbed_official | 107:414e9c822e99 | 110 | |
mbed_official | 107:414e9c822e99 | 111 | #if SAMG55 |
mbed_official | 107:414e9c822e99 | 112 | enum twi_source_clock { |
mbed_official | 107:414e9c822e99 | 113 | TWI_SOURCE_PERIPH_CLK = TWI_CWGR_BRSRCCLK_PERIPH_CLK, |
mbed_official | 107:414e9c822e99 | 114 | TWI_SOURCE_PCK_CLK = TWI_CWGR_BRSRCCLK_PMC_PCK, |
mbed_official | 107:414e9c822e99 | 115 | }; |
mbed_official | 107:414e9c822e99 | 116 | #endif |
mbed_official | 107:414e9c822e99 | 117 | |
mbed_official | 107:414e9c822e99 | 118 | void twi_enable_master_mode(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 119 | void twi_disable_master_mode(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 120 | uint32_t twi_master_init(Twi *p_twi, const twi_options_t *p_opt); |
mbed_official | 107:414e9c822e99 | 121 | uint32_t twi_set_speed(Twi *p_twi, uint32_t ul_speed, uint32_t ul_mck); |
mbed_official | 107:414e9c822e99 | 122 | uint32_t twi_probe(Twi *p_twi, uint8_t uc_slave_addr); |
mbed_official | 107:414e9c822e99 | 123 | uint32_t twi_master_read(Twi *p_twi, twi_packet_t *p_packet); |
mbed_official | 107:414e9c822e99 | 124 | uint32_t twi_master_write(Twi *p_twi, twi_packet_t *p_packet); |
mbed_official | 107:414e9c822e99 | 125 | void twi_enable_interrupt(Twi *p_twi, uint32_t ul_sources); |
mbed_official | 107:414e9c822e99 | 126 | void twi_disable_interrupt(Twi *p_twi, uint32_t ul_sources); |
mbed_official | 107:414e9c822e99 | 127 | uint32_t twi_get_interrupt_status(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 128 | uint32_t twi_get_interrupt_mask(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 129 | uint8_t twi_read_byte(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 130 | void twi_write_byte(Twi *p_twi, uint8_t uc_byte); |
mbed_official | 107:414e9c822e99 | 131 | void twi_enable_slave_mode(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 132 | void twi_disable_slave_mode(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 133 | void twi_slave_init(Twi *p_twi, uint32_t ul_device_addr); |
mbed_official | 107:414e9c822e99 | 134 | void twi_set_slave_addr(Twi *p_twi, uint32_t ul_device_addr); |
mbed_official | 107:414e9c822e99 | 135 | uint32_t twi_slave_read(Twi *p_twi, uint8_t *p_data); |
mbed_official | 107:414e9c822e99 | 136 | uint32_t twi_slave_write(Twi *p_twi, uint8_t *p_data); |
mbed_official | 107:414e9c822e99 | 137 | void twi_reset(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 138 | Pdc *twi_get_pdc_base(Twi *p_twi); |
mbed_official | 107:414e9c822e99 | 139 | #if (SAM4E || SAM4C || SAMG || SAM4CP || SAM4CM) |
mbed_official | 107:414e9c822e99 | 140 | void twi_set_write_protection(Twi *p_twi, bool flag); |
mbed_official | 107:414e9c822e99 | 141 | void twi_read_write_protection_status(Twi *p_twi, uint32_t *p_status); |
mbed_official | 107:414e9c822e99 | 142 | #endif |
mbed_official | 107:414e9c822e99 | 143 | |
mbed_official | 107:414e9c822e99 | 144 | #if SAMG55 |
mbed_official | 107:414e9c822e99 | 145 | void twi_smbus_set_timing(Twi *p_twi, uint32_t ul_timing); |
mbed_official | 107:414e9c822e99 | 146 | void twi_set_alternative_command(Twi *p_twi, uint32_t ul_alt_cmd); |
mbed_official | 107:414e9c822e99 | 147 | void twi_set_filter(Twi *p_twi, uint32_t ul_filter); |
mbed_official | 107:414e9c822e99 | 148 | void twi_mask_slave_addr(Twi *p_twi, uint32_t ul_mask); |
mbed_official | 107:414e9c822e99 | 149 | void twi_set_sleepwalking(Twi *p_twi, |
mbed_official | 107:414e9c822e99 | 150 | uint32_t ul_matching_addr1, bool flag1, |
mbed_official | 107:414e9c822e99 | 151 | uint32_t ul_matching_addr2, bool flag2, |
mbed_official | 107:414e9c822e99 | 152 | uint32_t ul_matching_addr3, bool flag3, |
mbed_official | 107:414e9c822e99 | 153 | uint32_t ul_matching_data, bool flag); |
mbed_official | 107:414e9c822e99 | 154 | |
mbed_official | 107:414e9c822e99 | 155 | /** |
mbed_official | 107:414e9c822e99 | 156 | * \brief Enable high speed mode. |
mbed_official | 107:414e9c822e99 | 157 | * |
mbed_official | 107:414e9c822e99 | 158 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 159 | */ |
mbed_official | 107:414e9c822e99 | 160 | static inline void twi_enable_highspeed(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 161 | { |
mbed_official | 107:414e9c822e99 | 162 | p_twi->TWI_CR = TWI_CR_HSEN; |
mbed_official | 107:414e9c822e99 | 163 | } |
mbed_official | 107:414e9c822e99 | 164 | |
mbed_official | 107:414e9c822e99 | 165 | /** |
mbed_official | 107:414e9c822e99 | 166 | * \brief Disable high speed mode. |
mbed_official | 107:414e9c822e99 | 167 | * |
mbed_official | 107:414e9c822e99 | 168 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 169 | */ |
mbed_official | 107:414e9c822e99 | 170 | static inline void twi_disable_highspeed(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 171 | { |
mbed_official | 107:414e9c822e99 | 172 | p_twi->TWI_CR = TWI_CR_HSDIS; |
mbed_official | 107:414e9c822e99 | 173 | } |
mbed_official | 107:414e9c822e99 | 174 | |
mbed_official | 107:414e9c822e99 | 175 | /** |
mbed_official | 107:414e9c822e99 | 176 | * \brief Enable SMBus mode. |
mbed_official | 107:414e9c822e99 | 177 | * |
mbed_official | 107:414e9c822e99 | 178 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 179 | */ |
mbed_official | 107:414e9c822e99 | 180 | static inline void twi_enable_smbus(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 181 | { |
mbed_official | 107:414e9c822e99 | 182 | p_twi->TWI_CR = TWI_CR_SMBEN; |
mbed_official | 107:414e9c822e99 | 183 | } |
mbed_official | 107:414e9c822e99 | 184 | |
mbed_official | 107:414e9c822e99 | 185 | /** |
mbed_official | 107:414e9c822e99 | 186 | * \brief Disable SMBus mode. |
mbed_official | 107:414e9c822e99 | 187 | * |
mbed_official | 107:414e9c822e99 | 188 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 189 | */ |
mbed_official | 107:414e9c822e99 | 190 | static inline void twi_disable_smbus(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 191 | { |
mbed_official | 107:414e9c822e99 | 192 | p_twi->TWI_CR = TWI_CR_SMBDIS; |
mbed_official | 107:414e9c822e99 | 193 | } |
mbed_official | 107:414e9c822e99 | 194 | |
mbed_official | 107:414e9c822e99 | 195 | /** |
mbed_official | 107:414e9c822e99 | 196 | * \brief Enable packet error checking. |
mbed_official | 107:414e9c822e99 | 197 | * |
mbed_official | 107:414e9c822e99 | 198 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 199 | */ |
mbed_official | 107:414e9c822e99 | 200 | static inline void twi_enable_pec(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 201 | { |
mbed_official | 107:414e9c822e99 | 202 | p_twi->TWI_CR = TWI_CR_PECEN; |
mbed_official | 107:414e9c822e99 | 203 | } |
mbed_official | 107:414e9c822e99 | 204 | |
mbed_official | 107:414e9c822e99 | 205 | /** |
mbed_official | 107:414e9c822e99 | 206 | * \brief Disable packet error checking. |
mbed_official | 107:414e9c822e99 | 207 | * |
mbed_official | 107:414e9c822e99 | 208 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 209 | */ |
mbed_official | 107:414e9c822e99 | 210 | static inline void twi_disable_pec(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 211 | { |
mbed_official | 107:414e9c822e99 | 212 | p_twi->TWI_CR = TWI_CR_PECDIS; |
mbed_official | 107:414e9c822e99 | 213 | } |
mbed_official | 107:414e9c822e99 | 214 | |
mbed_official | 107:414e9c822e99 | 215 | /** |
mbed_official | 107:414e9c822e99 | 216 | * \brief Request a packet error checking. |
mbed_official | 107:414e9c822e99 | 217 | * |
mbed_official | 107:414e9c822e99 | 218 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 219 | */ |
mbed_official | 107:414e9c822e99 | 220 | static inline void twi_request_pec(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 221 | { |
mbed_official | 107:414e9c822e99 | 222 | p_twi->TWI_CR = TWI_CR_PECRQ; |
mbed_official | 107:414e9c822e99 | 223 | } |
mbed_official | 107:414e9c822e99 | 224 | |
mbed_official | 107:414e9c822e99 | 225 | /** |
mbed_official | 107:414e9c822e99 | 226 | * \brief If master mode is enabled, send a bus clear command. |
mbed_official | 107:414e9c822e99 | 227 | * |
mbed_official | 107:414e9c822e99 | 228 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 229 | */ |
mbed_official | 107:414e9c822e99 | 230 | static inline void twi_send_clear(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 231 | { |
mbed_official | 107:414e9c822e99 | 232 | p_twi->TWI_CR = TWI_CR_CLEAR; |
mbed_official | 107:414e9c822e99 | 233 | } |
mbed_official | 107:414e9c822e99 | 234 | |
mbed_official | 107:414e9c822e99 | 235 | /** |
mbed_official | 107:414e9c822e99 | 236 | * \brief Enable alternative command mode. |
mbed_official | 107:414e9c822e99 | 237 | * |
mbed_official | 107:414e9c822e99 | 238 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 239 | */ |
mbed_official | 107:414e9c822e99 | 240 | static inline void twi_enable_alternative_command(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 241 | { |
mbed_official | 107:414e9c822e99 | 242 | p_twi->TWI_CR = TWI_CR_ACMEN; |
mbed_official | 107:414e9c822e99 | 243 | } |
mbed_official | 107:414e9c822e99 | 244 | |
mbed_official | 107:414e9c822e99 | 245 | /** |
mbed_official | 107:414e9c822e99 | 246 | * \brief Enable alternative command mode. |
mbed_official | 107:414e9c822e99 | 247 | * |
mbed_official | 107:414e9c822e99 | 248 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 249 | */ |
mbed_official | 107:414e9c822e99 | 250 | static inline void twi_disable_alternative_command(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 251 | { |
mbed_official | 107:414e9c822e99 | 252 | p_twi->TWI_CR = TWI_CR_ACMDIS; |
mbed_official | 107:414e9c822e99 | 253 | } |
mbed_official | 107:414e9c822e99 | 254 | |
mbed_official | 107:414e9c822e99 | 255 | /** |
mbed_official | 107:414e9c822e99 | 256 | * \brief Clear the Transmit Holding Register and set TXRDY, TXCOMP flags. |
mbed_official | 107:414e9c822e99 | 257 | * |
mbed_official | 107:414e9c822e99 | 258 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 259 | */ |
mbed_official | 107:414e9c822e99 | 260 | static inline void twi_thr_clear(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 261 | { |
mbed_official | 107:414e9c822e99 | 262 | p_twi->TWI_CR = TWI_CR_THRCLR; |
mbed_official | 107:414e9c822e99 | 263 | } |
mbed_official | 107:414e9c822e99 | 264 | |
mbed_official | 107:414e9c822e99 | 265 | /** |
mbed_official | 107:414e9c822e99 | 266 | * \brief Clear the TWI FSM lock. |
mbed_official | 107:414e9c822e99 | 267 | * |
mbed_official | 107:414e9c822e99 | 268 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 269 | */ |
mbed_official | 107:414e9c822e99 | 270 | static inline void twi_lock_clear(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 271 | { |
mbed_official | 107:414e9c822e99 | 272 | p_twi->TWI_CR = TWI_CR_LOCKCLR; |
mbed_official | 107:414e9c822e99 | 273 | } |
mbed_official | 107:414e9c822e99 | 274 | |
mbed_official | 107:414e9c822e99 | 275 | /** |
mbed_official | 107:414e9c822e99 | 276 | * \brief Normal value to be returned in the ACK cycle of the data phase in slave receiver mode. |
mbed_official | 107:414e9c822e99 | 277 | * |
mbed_official | 107:414e9c822e99 | 278 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 279 | */ |
mbed_official | 107:414e9c822e99 | 280 | static inline void twi_disable_slave_nack(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 281 | { |
mbed_official | 107:414e9c822e99 | 282 | p_twi->TWI_SMR &= ~TWI_SMR_NACKEN; |
mbed_official | 107:414e9c822e99 | 283 | } |
mbed_official | 107:414e9c822e99 | 284 | |
mbed_official | 107:414e9c822e99 | 285 | /** |
mbed_official | 107:414e9c822e99 | 286 | * \brief NACK value to be returned in the ACK cycle of the data phase in slave receiver mode. |
mbed_official | 107:414e9c822e99 | 287 | * |
mbed_official | 107:414e9c822e99 | 288 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 289 | */ |
mbed_official | 107:414e9c822e99 | 290 | static inline void twi_enable_slave_nack(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 291 | { |
mbed_official | 107:414e9c822e99 | 292 | p_twi->TWI_SMR |= TWI_SMR_NACKEN; |
mbed_official | 107:414e9c822e99 | 293 | } |
mbed_official | 107:414e9c822e99 | 294 | |
mbed_official | 107:414e9c822e99 | 295 | /** |
mbed_official | 107:414e9c822e99 | 296 | * \brief Acknowledge of the SMBus Default Address disabled. |
mbed_official | 107:414e9c822e99 | 297 | * |
mbed_official | 107:414e9c822e99 | 298 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 299 | */ |
mbed_official | 107:414e9c822e99 | 300 | static inline void twi_disable_slave_default_addr(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 301 | { |
mbed_official | 107:414e9c822e99 | 302 | p_twi->TWI_SMR &= ~TWI_SMR_SMDA; |
mbed_official | 107:414e9c822e99 | 303 | } |
mbed_official | 107:414e9c822e99 | 304 | |
mbed_official | 107:414e9c822e99 | 305 | /** |
mbed_official | 107:414e9c822e99 | 306 | * \brief Acknowledge of the SMBus Default Address enabled. |
mbed_official | 107:414e9c822e99 | 307 | * |
mbed_official | 107:414e9c822e99 | 308 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 309 | */ |
mbed_official | 107:414e9c822e99 | 310 | static inline void twi_enable_slave_default_addr(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 311 | { |
mbed_official | 107:414e9c822e99 | 312 | p_twi->TWI_SMR |= TWI_SMR_SMDA; |
mbed_official | 107:414e9c822e99 | 313 | } |
mbed_official | 107:414e9c822e99 | 314 | |
mbed_official | 107:414e9c822e99 | 315 | /** |
mbed_official | 107:414e9c822e99 | 316 | * \brief Acknowledge of the SMBus Host Header disabled. |
mbed_official | 107:414e9c822e99 | 317 | * |
mbed_official | 107:414e9c822e99 | 318 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 319 | */ |
mbed_official | 107:414e9c822e99 | 320 | static inline void twi_disable_smbus_host_header(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 321 | { |
mbed_official | 107:414e9c822e99 | 322 | p_twi->TWI_SMR &= ~TWI_SMR_SMHH; |
mbed_official | 107:414e9c822e99 | 323 | } |
mbed_official | 107:414e9c822e99 | 324 | |
mbed_official | 107:414e9c822e99 | 325 | /** |
mbed_official | 107:414e9c822e99 | 326 | * \brief Acknowledge of the SMBus Host Header enabled. |
mbed_official | 107:414e9c822e99 | 327 | * |
mbed_official | 107:414e9c822e99 | 328 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 329 | */ |
mbed_official | 107:414e9c822e99 | 330 | static inline void twi_enable_smbus_host_header(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 331 | { |
mbed_official | 107:414e9c822e99 | 332 | p_twi->TWI_SMR |= TWI_SMR_SMHH; |
mbed_official | 107:414e9c822e99 | 333 | } |
mbed_official | 107:414e9c822e99 | 334 | |
mbed_official | 107:414e9c822e99 | 335 | /** |
mbed_official | 107:414e9c822e99 | 336 | * \brief Clock stretching disabled in slave mode, OVRE and UNRE will indicate overrun and underrun. |
mbed_official | 107:414e9c822e99 | 337 | * |
mbed_official | 107:414e9c822e99 | 338 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 339 | */ |
mbed_official | 107:414e9c822e99 | 340 | static inline void twi_disable_clock_wait_state(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 341 | { |
mbed_official | 107:414e9c822e99 | 342 | p_twi->TWI_SMR |= TWI_SMR_SCLWSDIS; |
mbed_official | 107:414e9c822e99 | 343 | } |
mbed_official | 107:414e9c822e99 | 344 | |
mbed_official | 107:414e9c822e99 | 345 | /** |
mbed_official | 107:414e9c822e99 | 346 | * \brief Clear clock wait state disable mode. |
mbed_official | 107:414e9c822e99 | 347 | * |
mbed_official | 107:414e9c822e99 | 348 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 349 | */ |
mbed_official | 107:414e9c822e99 | 350 | static inline void twi_clear_disable_clock_wait_state(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 351 | { |
mbed_official | 107:414e9c822e99 | 352 | p_twi->TWI_SMR &= ~TWI_SMR_SCLWSDIS; |
mbed_official | 107:414e9c822e99 | 353 | } |
mbed_official | 107:414e9c822e99 | 354 | |
mbed_official | 107:414e9c822e99 | 355 | /** |
mbed_official | 107:414e9c822e99 | 356 | * \brief Slave Address 1 matching disabled. |
mbed_official | 107:414e9c822e99 | 357 | * |
mbed_official | 107:414e9c822e99 | 358 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 359 | */ |
mbed_official | 107:414e9c822e99 | 360 | static inline void twi_disable_slave_addr1_matching(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 361 | { |
mbed_official | 107:414e9c822e99 | 362 | p_twi->TWI_SMR &= ~TWI_SMR_SADR1EN; |
mbed_official | 107:414e9c822e99 | 363 | } |
mbed_official | 107:414e9c822e99 | 364 | |
mbed_official | 107:414e9c822e99 | 365 | /** |
mbed_official | 107:414e9c822e99 | 366 | * \brief Slave Address 1 matching enabled. |
mbed_official | 107:414e9c822e99 | 367 | * |
mbed_official | 107:414e9c822e99 | 368 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 369 | */ |
mbed_official | 107:414e9c822e99 | 370 | static inline void twi_enable_slave_addr1_matching(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 371 | { |
mbed_official | 107:414e9c822e99 | 372 | p_twi->TWI_SMR |= TWI_SMR_SADR1EN; |
mbed_official | 107:414e9c822e99 | 373 | } |
mbed_official | 107:414e9c822e99 | 374 | |
mbed_official | 107:414e9c822e99 | 375 | /** |
mbed_official | 107:414e9c822e99 | 376 | * \brief Slave Address 2 matching disabled. |
mbed_official | 107:414e9c822e99 | 377 | * |
mbed_official | 107:414e9c822e99 | 378 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 379 | */ |
mbed_official | 107:414e9c822e99 | 380 | static inline void twi_disable_slave_addr2_matching(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 381 | { |
mbed_official | 107:414e9c822e99 | 382 | p_twi->TWI_SMR &= ~TWI_SMR_SADR2EN; |
mbed_official | 107:414e9c822e99 | 383 | } |
mbed_official | 107:414e9c822e99 | 384 | |
mbed_official | 107:414e9c822e99 | 385 | /** |
mbed_official | 107:414e9c822e99 | 386 | * \brief Slave Address 2 matching enabled. |
mbed_official | 107:414e9c822e99 | 387 | * |
mbed_official | 107:414e9c822e99 | 388 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 389 | */ |
mbed_official | 107:414e9c822e99 | 390 | static inline void twi_enable_slave_addr2_matching(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 391 | { |
mbed_official | 107:414e9c822e99 | 392 | p_twi->TWI_SMR |= TWI_SMR_SADR2EN; |
mbed_official | 107:414e9c822e99 | 393 | } |
mbed_official | 107:414e9c822e99 | 394 | |
mbed_official | 107:414e9c822e99 | 395 | /** |
mbed_official | 107:414e9c822e99 | 396 | * \brief Slave Address 3 matching disabled. |
mbed_official | 107:414e9c822e99 | 397 | * |
mbed_official | 107:414e9c822e99 | 398 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 399 | */ |
mbed_official | 107:414e9c822e99 | 400 | static inline void twi_disable_slave_addr3_matching(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 401 | { |
mbed_official | 107:414e9c822e99 | 402 | p_twi->TWI_SMR &= ~TWI_SMR_SADR3EN; |
mbed_official | 107:414e9c822e99 | 403 | } |
mbed_official | 107:414e9c822e99 | 404 | |
mbed_official | 107:414e9c822e99 | 405 | /** |
mbed_official | 107:414e9c822e99 | 406 | * \brief Slave Address 3 matching enabled. |
mbed_official | 107:414e9c822e99 | 407 | * |
mbed_official | 107:414e9c822e99 | 408 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 409 | */ |
mbed_official | 107:414e9c822e99 | 410 | static inline void twi_enable_slave_addr3_matching(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 411 | { |
mbed_official | 107:414e9c822e99 | 412 | p_twi->TWI_SMR |= TWI_SMR_SADR3EN; |
mbed_official | 107:414e9c822e99 | 413 | } |
mbed_official | 107:414e9c822e99 | 414 | |
mbed_official | 107:414e9c822e99 | 415 | /** |
mbed_official | 107:414e9c822e99 | 416 | * \brief First received data matching disabled. |
mbed_official | 107:414e9c822e99 | 417 | * |
mbed_official | 107:414e9c822e99 | 418 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 419 | */ |
mbed_official | 107:414e9c822e99 | 420 | static inline void twi_disable_slave_data_matching(Twi *p_twi) |
mbed_official | 107:414e9c822e99 | 421 | { |
mbed_official | 107:414e9c822e99 | 422 | p_twi->TWI_SMR &= ~TWI_SMR_DATAMEN; |
mbed_official | 107:414e9c822e99 | 423 | } |
mbed_official | 107:414e9c822e99 | 424 | |
mbed_official | 107:414e9c822e99 | 425 | /** |
mbed_official | 107:414e9c822e99 | 426 | * \brief Select the souce clock for the bit rate generation. |
mbed_official | 107:414e9c822e99 | 427 | * |
mbed_official | 107:414e9c822e99 | 428 | * \param p_twi Base address of the TWI instance. |
mbed_official | 107:414e9c822e99 | 429 | * \param src_clk Source clock. |
mbed_official | 107:414e9c822e99 | 430 | */ |
mbed_official | 107:414e9c822e99 | 431 | static inline void twi_select_source_clock(Twi *p_twi, enum twi_source_clock src_clk) |
mbed_official | 107:414e9c822e99 | 432 | { |
mbed_official | 107:414e9c822e99 | 433 | p_twi->TWI_CWGR &= ~TWI_CWGR_BRSRCCLK; |
mbed_official | 107:414e9c822e99 | 434 | p_twi->TWI_CWGR |= src_clk; |
mbed_official | 107:414e9c822e99 | 435 | } |
mbed_official | 107:414e9c822e99 | 436 | #endif |
mbed_official | 107:414e9c822e99 | 437 | |
mbed_official | 107:414e9c822e99 | 438 | /// @cond 0 |
mbed_official | 107:414e9c822e99 | 439 | /**INDENT-OFF**/ |
mbed_official | 107:414e9c822e99 | 440 | #ifdef __cplusplus |
mbed_official | 107:414e9c822e99 | 441 | } |
mbed_official | 107:414e9c822e99 | 442 | #endif |
mbed_official | 107:414e9c822e99 | 443 | /**INDENT-ON**/ |
mbed_official | 107:414e9c822e99 | 444 | /// @endcond |
mbed_official | 107:414e9c822e99 | 445 | |
mbed_official | 107:414e9c822e99 | 446 | #endif /* TWI_H_INCLUDED */ |