XMEGA TWI master source file.
Copyright (c) 2010-2018 Microchip Technology Inc. and its subsidiaries.
#include "twim.h"
Functions | |
status_code_t | twi_master_init (TWI_t *twi, const twi_options_t *opt) |
Initialize the twi master module. More... | |
status_code_t | twi_master_transfer (TWI_t *twi, const twi_package_t *package, bool read) |
Perform a TWI master write or read transfer. More... | |
static status_code_t | twim_acquire (bool no_wait) |
Get exclusive access to global TWI resources. More... | |
static bool | twim_idle (const TWI_t *twi) |
Test for an idle bus state. More... | |
static void | twim_interrupt_handler (void) |
TWI Master Interrupt Vectors. More... | |
static void | twim_read_handler (void) |
TWI master read interrupt handler. More... | |
static status_code_t | twim_release (void) |
Release exclusive access to global TWI resources. More... | |
static void | twim_write_handler (void) |
TWI master write interrupt handler. More... | |
Variables | |
struct { | |
int addr_count | |
TWI_t * bus | |
unsigned int data_count | |
bool locked | |
twi_package_t * pkg | |
bool read | |
volatile status_code_t status | |
} | transfer |
|
inlinestatic |
Get exclusive access to global TWI resources.
Wait to acquire bus hardware interface and ISR variables.
no_wait | Set true to return instead of doing busy-wait (spin-lock). |
References cpu_irq_restore(), cpu_irq_save(), ERR_BUSY, OPERATION_IN_PROGRESS, STATUS_OK, and transfer.
Referenced by twi_master_transfer().
|
inlinestatic |
Test for an idle bus state.
Software can determine the TWI master bus state (unknown, idle, owner, or busy) by reading the bus master status register:
TWI_MASTER_BUSSTATE_UNKNOWN_gc Bus state is unknown. TWI_MASTER_BUSSTATE_IDLE_gc Bus state is idle. TWI_MASTER_BUSSTATE_OWNER_gc Bus state is owned by the master. TWI_MASTER_BUSSTATE_BUSY_gc Bus state is busy.
twi | Base address of the TWI (i.e. &TWI_t). |
true | The bus is currently idle. |
false | The bus is currently busy. |
Referenced by twim_release().
|
static |
TWI Master Interrupt Vectors.
Common TWI master interrupt service routine.
The TWI master interrupt request entry points are conditionally compiled for the TWI interfaces supported by the XMEGA MCU variant. All of these entry points call a common service function, twim_interrupt_handler(), to handle bus events. This handler uses the bus interface and message parameters specified in the global transfer
structure.
Check current status and calls the appropriate handler.
References ERR_BUSY, ERR_IO_ERROR, ERR_PROTOCOL, transfer, twim_read_handler(), and twim_write_handler().
|
inlinestatic |
TWI master read interrupt handler.
This is the master read interrupt handler that takes care of reading bytes from the TWI slave.
References twi_package_t::buffer, bus, data, ERR_NO_MEMORY, twi_package_t::length, pkg, STATUS_OK, and transfer.
Referenced by twim_interrupt_handler().
|
inlinestatic |
Release exclusive access to global TWI resources.
Release bus hardware interface and ISR variables previously locked by a call to twim_acquire(). This function will busy-wait for pending driver operations to complete.
References barrier, ERR_TIMEOUT, OPERATION_IN_PROGRESS, status, transfer, and twim_idle().
Referenced by twi_master_transfer().
|
inlinestatic |
TWI master write interrupt handler.
Handles TWI transactions (master write) and responses to (N)ACK.
References twi_package_t::addr, twi_package_t::addr_length, twi_package_t::buffer, bus, data, twi_package_t::length, pkg, STATUS_OK, and transfer.
Referenced by twim_interrupt_handler().
int addr_count |
TWI_t* bus |
Referenced by twim_read_handler(), and twim_write_handler().
unsigned int data_count |
bool locked |
twi_package_t* pkg |
Referenced by twim_read_handler(), and twim_write_handler().
bool read |
Referenced by sensor_read(), and twi_master_transfer().
volatile status_code_t status |
Referenced by ak8975_ioctl(), at25dfx_read_status(), at45dbx_mem_check(), at45dbx_wait_ready(), bma020_init(), bma150_event(), bma150_init(), bma180_init(), bma220_event(), bma220_init(), bma222_event(), bma222_init(), bma250_event(), bma250_init(), bmp085_init(), bmp180_init(), bmp_ioctl(), dma_interrupt(), dump_trx_register_values(), hmc5883l_init(), hmc5883l_ioctl(), hmc5883l_selftest(), imu3000_default_init(), imu3000_event(), imu3000_init(), itg3200_default_init(), itg3200_event(), itg3200_init(), kxtf9_event(), kxtf9_init(), mac_gen_mcps_data_conf(), mac_gen_mlme_gts_conf(), mac_process_tal_tx_status(), mac_reset(), main(), mem_read_capacity(), mem_test_unit_ready(), memory_2_ram(), memory_2_usb(), mlme_get(), mlme_reset_request(), mlme_set(), mlme_set_request(), mxt_init(), mxt_init_device(), mxt_probe_device(), mxt_process_messages(), mxt_read_info_block(), mxt_read_touch_event(), parse_mpdu(), peer_search_initiator_tx_done_cb(), per_mode_receptor_tx_done_cb(), ram_2_memory(), run_byte_access_test(), run_fifo_flush_test(), run_fifo_overflow_test(), run_fifo_push_pull_test(), run_fifo_size_test(), run_fifo_underflow_test(), run_memory_check_test(), run_memory_range_check_test(), run_multiple_sector_access_test(), run_sector_access_test(), send_reset_conf(), sensor_device_id(), sensor_get_sample_interval(), sensor_get_threshold(), sensor_irq_connect(), set_paramter_on_recptor_node(), set_tal_pib_internal(), sfh5712_init(), sfh5712_ioctl(), sfh7770_event(), sfh7770_init(), sfh7770_ioctl(), sfh7770_set_current(), sfh7770_set_rate(), sio2host_tx(), sio2ncp_tx(), spi_at45dbx_mem_check(), stream_mem_to_mem(), tal_tx_frame_done_cb(), twi_master_transfer(), twim_release(), tx_done_handling(), usb_2_memory(), usr_cont_pulse_tx_confirm(), usr_cont_wave_tx_confirm(), usr_ed_scan_start_confirm(), usr_get_current_config_confirm(), usr_identify_board_confirm(), usr_identify_peer_node_confirm(), usr_mcps_data_conf(), usr_mlme_reset_conf(), usr_mlme_set_conf(), usr_peer_disconnect_confirm(), usr_per_test_end_indication(), usr_per_test_start_confirm(), usr_perf_get_confirm(), usr_perf_set_confirm(), usr_perf_start_confirm(), usr_pkt_stream_confirm(), usr_range_test_start_confirm(), usr_range_test_stop_confirm(), usr_register_dump_confirm(), usr_register_read_confirm(), usr_register_write_confirm(), usr_rx_on_confirm(), usr_sensor_data_get_confirm(), and usr_set_default_config_confirm().
struct { ... } transfer |