![]() |
|
|||
File indexing completed on 2025-05-11 08:23:45
0001 /* 0002 * MCF5206e MBUS module (I2C bus) driver header file 0003 * 0004 * Copyright (C) 2000 OKTET Ltd., St.-Petersburg, Russia 0005 * Author: Victor V. Vengerov <vvv@oktet.ru> 0006 * 0007 * The license and distribution terms for this file may be 0008 * found in the file LICENSE in this distribution or at 0009 * http://www.rtems.org/license/LICENSE. 0010 */ 0011 0012 #ifndef __MCFBSP_MCFMBUS_H__ 0013 #define __MCFBSP_MCFMBUS_H__ 0014 0015 #include "mcf5206e.h" 0016 #include "i2c.h" 0017 0018 /* States of I2C machine */ 0019 typedef enum mcfmbus_i2c_state { 0020 STATE_IDLE, 0021 STATE_ADDR_7, 0022 STATE_ADDR_1_W, 0023 STATE_ADDR_1_R, 0024 STATE_SENDING, 0025 STATE_RECEIVING 0026 } mcfmbus_i2c_state; 0027 0028 typedef struct mcfmbus { 0029 uint32_t base; /* ColdFire internal peripherial base 0030 address */ 0031 enum mcfmbus_i2c_state state;/* State of I2C machine */ 0032 i2c_message *msg; /* Pointer to the first message in transfer */ 0033 int nmsg; /* Number of messages in transfer */ 0034 i2c_message *cmsg; /* Current message */ 0035 int byte; /* Byte number in current message */ 0036 rtems_isr_entry oldisr; /* Old interrupt handler */ 0037 rtems_id sema; /* MBUS semaphore */ 0038 i2c_transfer_done done; /* Transfer done function */ 0039 uintptr_t done_arg_ptr; /* Done function argument ptr */ 0040 } mcfmbus; 0041 0042 /* mcfmbus_initialize -- 0043 * Initialize ColdFire MBUS I2C bus controller. 0044 * 0045 * PARAMETERS: 0046 * i2c_bus - pointer to the bus descriptor structure 0047 * base - ColdFire internal peripherial base address 0048 * 0049 * RETURNS: 0050 * RTEMS_SUCCESSFUL, or RTEMS error code when initialization failed. 0051 */ 0052 rtems_status_code 0053 mcfmbus_initialize(mcfmbus *i2c_bus, uint32_t base); 0054 0055 /* mcfmbus_select_clock_divider -- 0056 * Select divider for system clock which is used for I2C bus clock 0057 * generation. Not each divider can be selected for I2C bus; this 0058 * function select nearest larger or equal divider, or maximum 0059 * possible divider, if passed value greater. 0060 * 0061 * PARAMETERS: 0062 * i2c_bus - pointer to the bus descriptor structure 0063 * divider - system frequency divider for I2C serial clock. 0064 * 0065 * RETURNS: 0066 * RTEMS_SUCCESSFUL, if operation performed successfully, or 0067 * RTEMS error code when failed. 0068 */ 0069 rtems_status_code 0070 mcfmbus_select_clock_divider(mcfmbus *i2c_bus, int divider); 0071 0072 /* mcfmbus_i2c_transfer -- 0073 * Initiate multiple-messages transfer over I2C bus via ColdFire MBUS 0074 * controller. 0075 * 0076 * PARAMETERS: 0077 * bus - pointer to MBUS controller descriptor 0078 * nmsg - number of messages 0079 * msg - pointer to messages array 0080 * done - function which is called when transfer is finished 0081 * done_arg_ptr - arbitrary argument ptr passed to done funciton 0082 * 0083 * RETURNS: 0084 * RTEMS_SUCCESSFUL if transfer initiated successfully, or error 0085 * code when failed. 0086 */ 0087 rtems_status_code 0088 mcfmbus_i2c_transfer(mcfmbus *bus, int nmsg, i2c_message *msg, 0089 i2c_transfer_done done, void *done_arg_ptr); 0090 0091 /* mcfmbus_i2c_done -- 0092 * Close ColdFire MBUS I2C bus controller and release all resources. 0093 * 0094 * PARAMETERS: 0095 * bus - pointer to MBUS controller descriptor 0096 * 0097 * RETURNS: 0098 * RTEMS_SUCCESSFUL, if transfer initiated successfully, or error 0099 * code when failed. 0100 */ 0101 rtems_status_code 0102 mcfmbus_i2c_done(mcfmbus *i2c_bus); 0103 0104 /* mcfmbus_i2c_interrupt_handler -- 0105 * ColdFire MBUS I2C bus controller interrupt handler. This function 0106 * called from real interrupt handler, and pointer to MBUS descriptor 0107 * structure passed to this function. 0108 * 0109 * PARAMETERS: 0110 * bus - pointert to the bus descriptor structure 0111 * 0112 * RETURNS: 0113 * none 0114 */ 0115 void mcfmbus_i2c_interrupt_handler(mcfmbus *bus); 0116 0117 /* mcfmbus_poll -- 0118 * MBUS module poll routine; used to poll events when I2C driver 0119 * operates in poll-driven mode. 0120 * 0121 * PARAMETERS: 0122 * none 0123 * 0124 * RETURNS: 0125 * none 0126 */ 0127 void mcfmbus_poll(mcfmbus *bus); 0128 0129 #endif /* __MCFBSP_MCFMBUS_H__ */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |