mini board PCU9669 (and PCA9665) sample code

Dependencies:   mbed PCU9669 utility PCA9665 I2C_slaves parallel_bus

Fork of mini_board_PCU9669_old by InetrfaceProducts NXP

Sample code for PCU9669 (PCU9661, PCA9663, PCA9661 and PCA9665) evaluation board.

PCU9669 evaluation board: Mini board PCU9669
User manual is available -> http://www.nxp.com/documents/user_manual/UM10580.pdf

Committer:
nxp_ip
Date:
Wed Jan 14 04:30:45 2015 +0000
Revision:
20:2b9eaa43cfac
Parent:
8:6120bbbe3636
Child:
16:e0e1043dd0bf
PCA9665 error handling improved

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 0:de9a15767563 1 /** A sample code for "mini board PCU9669/PCA9665"
nxp_ip 0:de9a15767563 2 *
nxp_ip 6:1fc6a640d320 3 * @author Akifumi (Tedd) OKANO, NXP Semiconductors
nxp_ip 6:1fc6a640d320 4 * @version 1.0
nxp_ip 8:6120bbbe3636 5 * @date 26-Mar-2012
nxp_ip 0:de9a15767563 6 *
nxp_ip 0:de9a15767563 7 * Released under the MIT License: http://mbed.org/license/mit
nxp_ip 0:de9a15767563 8 *
nxp_ip 0:de9a15767563 9 * An operation sample of PCU9669/PCA9665 I2C bus controller.
nxp_ip 0:de9a15767563 10 * The mbed accesses the bus controller's parallel port (8/2 bit address and 8 bit data) by bit-banging.
nxp_ip 0:de9a15767563 11 * The bit-banging is poerformed by PortInOut function of mbed library.
nxp_ip 0:de9a15767563 12 *
nxp_ip 0:de9a15767563 13 * To make the code porting easier, all codes are partitioned into layers to abstract other parts.
nxp_ip 0:de9a15767563 14 * The mbed specific parts are concentrated in lowest layer: "hardware_abs.*".
nxp_ip 0:de9a15767563 15 * This module may need to be modified for the porting.
nxp_ip 0:de9a15767563 16 *
nxp_ip 0:de9a15767563 17 * All other upper layers are writen in standard-C.
nxp_ip 0:de9a15767563 18 *
nxp_ip 0:de9a15767563 19 * base code is written from 05-Sep-2011 to 09-Sep-2011.
nxp_ip 0:de9a15767563 20 * And demo code has been build on 11-Sep-2011.
nxp_ip 0:de9a15767563 21 * Debug and code adjustment has been done on 08-Sep-2011.
nxp_ip 0:de9a15767563 22 * Small sanitization for main.cpp. All mbed related codes are moved in to "hardware_abs.*". 13-Oct-2011
nxp_ip 0:de9a15767563 23 * hardware_abs are moved into parallel_bus library folder, 3 LED driver operation sample 13-Feb.-2012
nxp_ip 0:de9a15767563 24 * PCU9669 and PCA9665 codes are packed in a project 14-Feb-2012.
nxp_ip 0:de9a15767563 25 *
nxp_ip 0:de9a15767563 26 * Before builidng the code, please edit the file mini_board_PCU9669/config.h
nxp_ip 6:1fc6a640d320 27 * Un-comment the target name what you want to target.
nxp_ip 0:de9a15767563 28 */
nxp_ip 0:de9a15767563 29
nxp_ip 0:de9a15767563 30
nxp_ip 0:de9a15767563 31 #include "config.h"
nxp_ip 5:57c345099873 32 #include "hardware_abs.h"
nxp_ip 0:de9a15767563 33 #include "PCA9665_access.h"
nxp_ip 0:de9a15767563 34 #include "PCx9955_reg.h"
nxp_ip 0:de9a15767563 35 #include "PCA9629_reg.h"
nxp_ip 0:de9a15767563 36 #include "utility.h"
nxp_ip 0:de9a15767563 37
nxp_ip 0:de9a15767563 38 #include "mbed.h" // this header is required only when printf() is used.
nxp_ip 0:de9a15767563 39
nxp_ip 0:de9a15767563 40 #ifdef CODE_FOR_PCA9665
nxp_ip 0:de9a15767563 41
nxp_ip 5:57c345099873 42 #define RESET_PULSE_WIDTH_US 100
nxp_ip 5:57c345099873 43 #define RESET_RECOVERY_US 100
nxp_ip 5:57c345099873 44
nxp_ip 0:de9a15767563 45 char PCx9955_reg_data[] = {
nxp_ip 0:de9a15767563 46 0x80, // Strat register address with AutoIncrement bit
nxp_ip 0:de9a15767563 47 0x00, 0x05, // MODE1, MODE2
nxp_ip 0:de9a15767563 48 0xAA, 0xAA, 0xAA, 0xAA, // LEDOUT[3:0]
nxp_ip 0:de9a15767563 49 0x80, 0x00, // GRPPWM, GRPFREQ
nxp_ip 0:de9a15767563 50 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[3:0]
nxp_ip 0:de9a15767563 51 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[7:4]
nxp_ip 0:de9a15767563 52 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[11:8]
nxp_ip 0:de9a15767563 53 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[15:12]
nxp_ip 0:de9a15767563 54 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[3:0]
nxp_ip 0:de9a15767563 55 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[7:4]
nxp_ip 0:de9a15767563 56 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[11:8]
nxp_ip 0:de9a15767563 57 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[15:12]
nxp_ip 0:de9a15767563 58 0x08 // OFFSET: 1uS offsets
nxp_ip 0:de9a15767563 59 };
nxp_ip 0:de9a15767563 60
nxp_ip 0:de9a15767563 61 char PCx9955_reg_read_start_address = 0x80;
nxp_ip 0:de9a15767563 62
nxp_ip 5:57c345099873 63 char read_buffer[ 41 ];
nxp_ip 0:de9a15767563 64
nxp_ip 0:de9a15767563 65
nxp_ip 0:de9a15767563 66 int main() {
nxp_ip 0:de9a15767563 67 int count = 0;
nxp_ip 0:de9a15767563 68 int i;
nxp_ip 0:de9a15767563 69 int j;
nxp_ip 0:de9a15767563 70
nxp_ip 0:de9a15767563 71 printf( "\r\nPCU9665 simple demo program on mbed\r\n build : %s (UTC), %s \r\n\r\n", __TIME__, __DATE__ );
nxp_ip 0:de9a15767563 72
nxp_ip 0:de9a15767563 73 hardware_initialize(); // initializing bit-banging parallel port
nxp_ip 5:57c345099873 74 reset( RESET_PULSE_WIDTH_US, RESET_RECOVERY_US );
nxp_ip 0:de9a15767563 75 PCA9665_init();
nxp_ip 0:de9a15767563 76
nxp_ip 0:de9a15767563 77 // set_speed_mode( SPEED_STD_MODE );
nxp_ip 0:de9a15767563 78 // set_speed_mode( SPEED_FAST_MODE );
nxp_ip 0:de9a15767563 79 set_speed_mode( SPEED_FAST_MODE_PLUS );
nxp_ip 0:de9a15767563 80
nxp_ip 0:de9a15767563 81 // set_buffer_mode( DISABLE );
nxp_ip 0:de9a15767563 82 set_buffer_mode( ENABLE );
nxp_ip 0:de9a15767563 83
nxp_ip 0:de9a15767563 84 while ( 1 ) {
nxp_ip 0:de9a15767563 85 for ( i = 0; i < 16; i++ ) {
nxp_ip 0:de9a15767563 86 for ( j = 0; j < 256; j += 4 ) {
nxp_ip 0:de9a15767563 87
nxp_ip 0:de9a15767563 88 PCx9955_reg_data[ 9 + i ] = j;
nxp_ip 0:de9a15767563 89
nxp_ip 0:de9a15767563 90 if ( i & 0x01 )
nxp_ip 0:de9a15767563 91 set_buffer_mode( ENABLE );
nxp_ip 0:de9a15767563 92 else
nxp_ip 0:de9a15767563 93 set_buffer_mode( DISABLE );
nxp_ip 0:de9a15767563 94
nxp_ip 0:de9a15767563 95 i2c_write( PCx9955_ADDR0, PCx9955_reg_data, sizeof( PCx9955_reg_data ), NEXT_RESTART );
nxp_ip 0:de9a15767563 96 i2c_write( PCx9955_ADDR0, &PCx9955_reg_read_start_address, sizeof( PCx9955_reg_read_start_address ), NEXT_RESTART );
nxp_ip 0:de9a15767563 97 i2c_read( PCx9955_ADDR0, read_buffer, sizeof( read_buffer ), STOP );
nxp_ip 0:de9a15767563 98
nxp_ip 0:de9a15767563 99 // dump_read_data( read_buffer, sizeof( read_buffer ) );
nxp_ip 0:de9a15767563 100
nxp_ip 0:de9a15767563 101 wait( 0.01 );
nxp_ip 0:de9a15767563 102 count++;
nxp_ip 0:de9a15767563 103 }
nxp_ip 0:de9a15767563 104 }
nxp_ip 0:de9a15767563 105 for ( i = 0; i < 16; i++ )
nxp_ip 0:de9a15767563 106 PCx9955_reg_data[ 9 + i ] = 0;
nxp_ip 0:de9a15767563 107 }
nxp_ip 0:de9a15767563 108 }
nxp_ip 0:de9a15767563 109
nxp_ip 0:de9a15767563 110 #endif // CODE_FOR_PCA9665