added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

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?

UserRevisionLine numberNew 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 */