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