Back to home page

LXR

 
 

    


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__ */