NEORV32 - Software Framework Documentation
Loading...
Searching...
No Matches
Data Structures
neorv32_twi.h File Reference

Two-Wire Interface Controller (TWI) HW driver header file. More...

Go to the source code of this file.

Data Structures

struct  neorv32_twi_t
 

Functions

Prototypes
int neorv32_twi_available (void)
 
void neorv32_twi_setup (int prsc, int cdiv, int csen)
 
void neorv32_twi_disable (void)
 
void neorv32_twi_enable (void)
 
void neorv32_twi_mack_enable (void)
 
void neorv32_twi_mack_disable (void)
 
int neorv32_twi_busy (void)
 
int neorv32_twi_start_trans (uint8_t a)
 
int neorv32_twi_trans (uint8_t d)
 
uint8_t neorv32_twi_get_data (void)
 
void neorv32_twi_generate_stop (void)
 
void neorv32_twi_generate_start (void)
 
int neorv32_twi_bus_claimed (void)
 

IO Device: Two-Wire Interface Controller (TWI)

#define NEORV32_TWI   ((neorv32_twi_t*) (NEORV32_TWI_BASE))
 
enum  NEORV32_TWI_CTRL_enum {
  TWI_CTRL_EN = 0 , TWI_CTRL_START = 1 , TWI_CTRL_STOP = 2 , TWI_CTRL_MACK = 3 ,
  TWI_CTRL_CSEN = 4 , TWI_CTRL_PRSC0 = 5 , TWI_CTRL_PRSC1 = 6 , TWI_CTRL_PRSC2 = 7 ,
  TWI_CTRL_CDIV0 = 8 , TWI_CTRL_CDIV1 = 9 , TWI_CTRL_CDIV2 = 10 , TWI_CTRL_CDIV3 = 11 ,
  TWI_CTRL_CLAIMED = 29 , TWI_CTRL_ACK = 30 , TWI_CTRL_BUSY = 31
}
 
enum  NEORV32_TWI_DATA_enum { TWI_DATA_LSB = 0 , TWI_DATA_MSB = 7 }
 

Detailed Description

Two-Wire Interface Controller (TWI) HW driver header file.

Note
These functions should only be used if the TWI unit was synthesized (IO_TWI_EN = true).

Macro Definition Documentation

◆ NEORV32_TWI

#define NEORV32_TWI   ((neorv32_twi_t*) (NEORV32_TWI_BASE))

TWI module hardware access (neorv32_twi_t)

Enumeration Type Documentation

◆ NEORV32_TWI_CTRL_enum

TWI control register bits

Enumerator
TWI_CTRL_EN 

TWI control register(0) (r/w): TWI enable

TWI_CTRL_START 

TWI control register(1) (-/w): Generate START condition, auto-clears

TWI_CTRL_STOP 

TWI control register(2) (-/w): Generate STOP condition, auto-clears

TWI_CTRL_MACK 

TWI control register(3) (r/w): Generate ACK by controller for each transmission

TWI_CTRL_CSEN 

TWI control register(4) (r/w): Allow clock stretching when set

TWI_CTRL_PRSC0 

TWI control register(5) (r/w): Clock prescaler select bit 0

TWI_CTRL_PRSC1 

TWI control register(6) (r/w): Clock prescaler select bit 1

TWI_CTRL_PRSC2 

TWI control register(7) (r/w): Clock prescaler select bit 2

TWI_CTRL_CDIV0 

TWI control register(8) (r/w): Clock divider bit 0

TWI_CTRL_CDIV1 

TWI control register(9) (r/w): Clock divider bit 1

TWI_CTRL_CDIV2 

TWI control register(10) (r/w): Clock divider bit 2

TWI_CTRL_CDIV3 

TWI control register(11) (r/w): Clock divider bit 3

TWI_CTRL_CLAIMED 

TWI control register(29) (r/-): Set if the TWI bus is currently claimed by any controller

TWI_CTRL_ACK 

TWI control register(30) (r/-): ACK received when set

TWI_CTRL_BUSY 

TWI control register(31) (r/-): Transfer in progress, busy flag

◆ NEORV32_TWI_DATA_enum

TWI receive/transmit data register bits

Enumerator
TWI_DATA_LSB 

TWI data register(0) (r/w): Receive/transmit data (8-bit) LSB

TWI_DATA_MSB 

TWI data register(7) (r/w): Receive/transmit data (8-bit) MSB

Function Documentation

◆ neorv32_twi_available()

int neorv32_twi_available ( void  )

Check if TWI unit was synthesized.

Returns
0 if TWI was not synthesized, 1 if TWI is available.

◆ neorv32_twi_bus_claimed()

int neorv32_twi_bus_claimed ( void  )

Check if the TWI bus is currently claimed by any controller.

Returns
0: 0 if bus is not claimed, 1 if bus is claimed.

◆ neorv32_twi_busy()

int neorv32_twi_busy ( void  )

Check if TWI is busy.

Returns
0 if idle, 1 if busy

◆ neorv32_twi_disable()

void neorv32_twi_disable ( void  )

Disable TWI controller.

◆ neorv32_twi_enable()

void neorv32_twi_enable ( void  )

Enable TWI controller.

◆ neorv32_twi_generate_start()

void neorv32_twi_generate_start ( void  )

Generate START (or REPEATED-START) condition.

Note
Blocking function.

◆ neorv32_twi_generate_stop()

void neorv32_twi_generate_stop ( void  )

Generate STOP condition.

Note
Blocking function.

◆ neorv32_twi_get_data()

uint8_t neorv32_twi_get_data ( void  )

Get received data from last transmission.

Returns
0: Last received data byte.

◆ neorv32_twi_mack_disable()

void neorv32_twi_mack_disable ( void  )

Deactivate sending ACKs by controller (MACK).

◆ neorv32_twi_mack_enable()

void neorv32_twi_mack_enable ( void  )

Activate sending ACKs by controller (MACK).

◆ neorv32_twi_setup()

void neorv32_twi_setup ( int  prsc,
int  cdiv,
int  csen 
)

Enable and configure TWI controller. The TWI control register bits are listed in NEORV32_TWI_CTRL_enum.

Parameters
[in]prscClock prescaler select (0..7). See NEORV32_CLOCK_PRSC_enum.
[in]cdivClock divider (0..15).
[in]csenAllow clock stretching when 1.

◆ neorv32_twi_start_trans()

int neorv32_twi_start_trans ( uint8_t  a)

Generate START condition and send first byte (address including R/W bit).

Note
Blocking function.
Parameters
[in]aData byte including 7-bit address and R/W-bit (lsb).
Returns
0: ACK received, 1: NACK received.

◆ neorv32_twi_trans()

int neorv32_twi_trans ( uint8_t  d)

Send data byte and also receive data byte (can be read via neorv32_twi_get_data()).

Note
Blocking function.
Parameters
[in]dData byte to be send.
Returns
0: ACK received, 1: NACK received.