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:
Thu Mar 15 04:07:07 2012 +0000
Revision:
0:de9a15767563
Child:
3:42f933bd12b3
libraries are published from same account

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 0:de9a15767563 3 * @author Tedd OKANO, NXP Semiconductors
nxp_ip 0:de9a15767563 4 * @version 0.9
nxp_ip 0:de9a15767563 5 * @date 14-Feb-2011
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 0:de9a15767563 27 * Uncomment 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 0:de9a15767563 32 #include "PCA9665_access.h"
nxp_ip 0:de9a15767563 33 #include "PCx9955_reg.h"
nxp_ip 0:de9a15767563 34 #include "PCA9629_reg.h"
nxp_ip 0:de9a15767563 35 #include "hardware_abs.h" // to use install_ISR() and wait_sec() functions
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 0:de9a15767563 42 char PCx9955_reg_data[] = {
nxp_ip 0:de9a15767563 43 0x80, // Strat register address with AutoIncrement bit
nxp_ip 0:de9a15767563 44 0x00, 0x05, // MODE1, MODE2
nxp_ip 0:de9a15767563 45 0xAA, 0xAA, 0xAA, 0xAA, // LEDOUT[3:0]
nxp_ip 0:de9a15767563 46 0x80, 0x00, // GRPPWM, GRPFREQ
nxp_ip 0:de9a15767563 47 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[3:0]
nxp_ip 0:de9a15767563 48 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[7:4]
nxp_ip 0:de9a15767563 49 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[11:8]
nxp_ip 0:de9a15767563 50 PWM_INIT, PWM_INIT, PWM_INIT, PWM_INIT, // PWM[15:12]
nxp_ip 0:de9a15767563 51 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[3:0]
nxp_ip 0:de9a15767563 52 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[7:4]
nxp_ip 0:de9a15767563 53 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[11:8]
nxp_ip 0:de9a15767563 54 IREF_INIT, IREF_INIT, IREF_INIT, IREF_INIT, // IREF[15:12]
nxp_ip 0:de9a15767563 55 0x08 // OFFSET: 1uS offsets
nxp_ip 0:de9a15767563 56 };
nxp_ip 0:de9a15767563 57
nxp_ip 0:de9a15767563 58 char PCx9629_reg_data[] = { // This sample data performs ramp-up/down with rotation=2 in 1 second
nxp_ip 0:de9a15767563 59 0x80, // Strat register address with AutoIncrement bit
nxp_ip 0:de9a15767563 60 0x20, 0xE2, 0xE4, 0xE6, 0xE0, 0xFF, 0x10, // for registers MODE - WDCNTL (0x00 - 0x06
nxp_ip 0:de9a15767563 61 0x00, 0x00, // for registers IP and INTSTAT (0x07, 0x08)
nxp_ip 0:de9a15767563 62 0x0F, 0x03, 0x0C, 0x0F, 0x03, 0x00, 0x03, 0x03, 0x01, // for registers OP - INT_AUTO_CLR (0x09 - 0x11)
nxp_ip 0:de9a15767563 63 0x03, 0x00, 0x30, 0x00, 0x1D, 0x07, 0x1D, 0x07, // for registers SETMODE - CCWPWH (0x12 - 0x19)
nxp_ip 0:de9a15767563 64 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // for registers CWSCOUNTL - CCWRCOUNTH (0x1A - 0x21)
nxp_ip 0:de9a15767563 65 0x08, 0x08, // for registers EXTRASTEPS0 and EXTRASTEPS1 (0x22, 0x23)
nxp_ip 0:de9a15767563 66 0x38, 0x00, 0x80 // for registers RMPCNTL - MCNTL (0x24 - 0x26)
nxp_ip 0:de9a15767563 67 };
nxp_ip 0:de9a15767563 68
nxp_ip 0:de9a15767563 69 char PCx9955_reg_read_start_address = 0x80;
nxp_ip 0:de9a15767563 70
nxp_ip 0:de9a15767563 71 char read_buffer[ 46 ];
nxp_ip 0:de9a15767563 72
nxp_ip 0:de9a15767563 73
nxp_ip 0:de9a15767563 74 int main() {
nxp_ip 0:de9a15767563 75 int count = 0;
nxp_ip 0:de9a15767563 76 int i;
nxp_ip 0:de9a15767563 77 int j;
nxp_ip 0:de9a15767563 78
nxp_ip 0:de9a15767563 79 printf( "\r\nPCU9665 simple demo program on mbed\r\n build : %s (UTC), %s \r\n\r\n", __TIME__, __DATE__ );
nxp_ip 0:de9a15767563 80
nxp_ip 0:de9a15767563 81 hardware_initialize(); // initializing bit-banging parallel port
nxp_ip 0:de9a15767563 82 PCA9665_init();
nxp_ip 0:de9a15767563 83
nxp_ip 0:de9a15767563 84 // set_speed_mode( SPEED_STD_MODE );
nxp_ip 0:de9a15767563 85 // set_speed_mode( SPEED_FAST_MODE );
nxp_ip 0:de9a15767563 86 set_speed_mode( SPEED_FAST_MODE_PLUS );
nxp_ip 0:de9a15767563 87
nxp_ip 0:de9a15767563 88 // set_buffer_mode( DISABLE );
nxp_ip 0:de9a15767563 89 set_buffer_mode( ENABLE );
nxp_ip 0:de9a15767563 90
nxp_ip 0:de9a15767563 91 while ( 1 ) {
nxp_ip 0:de9a15767563 92 for ( i = 0; i < 16; i++ ) {
nxp_ip 0:de9a15767563 93 for ( j = 0; j < 256; j += 4 ) {
nxp_ip 0:de9a15767563 94
nxp_ip 0:de9a15767563 95 PCx9955_reg_data[ 9 + i ] = j;
nxp_ip 0:de9a15767563 96
nxp_ip 0:de9a15767563 97 if ( i & 0x01 )
nxp_ip 0:de9a15767563 98 set_buffer_mode( ENABLE );
nxp_ip 0:de9a15767563 99 else
nxp_ip 0:de9a15767563 100 set_buffer_mode( DISABLE );
nxp_ip 0:de9a15767563 101
nxp_ip 0:de9a15767563 102
nxp_ip 0:de9a15767563 103 i2c_write( PCx9955_ADDR0, PCx9955_reg_data, sizeof( PCx9955_reg_data ), NEXT_RESTART );
nxp_ip 0:de9a15767563 104 i2c_write( PCx9955_ADDR0, &PCx9955_reg_read_start_address, sizeof( PCx9955_reg_read_start_address ), NEXT_RESTART );
nxp_ip 0:de9a15767563 105 i2c_read( PCx9955_ADDR0, read_buffer, sizeof( read_buffer ), STOP );
nxp_ip 0:de9a15767563 106
nxp_ip 0:de9a15767563 107 if ( !(count % 256) )
nxp_ip 0:de9a15767563 108 i2c_write( PCA9629_ADDR5, PCx9629_reg_data, sizeof( PCx9629_reg_data ), STOP );
nxp_ip 0:de9a15767563 109
nxp_ip 0:de9a15767563 110 // dump_read_data( read_buffer, sizeof( read_buffer ) );
nxp_ip 0:de9a15767563 111
nxp_ip 0:de9a15767563 112 wait( 0.01 );
nxp_ip 0:de9a15767563 113 count++;
nxp_ip 0:de9a15767563 114 }
nxp_ip 0:de9a15767563 115 }
nxp_ip 0:de9a15767563 116 for ( i = 0; i < 16; i++ )
nxp_ip 0:de9a15767563 117 PCx9955_reg_data[ 9 + i ] = 0;
nxp_ip 0:de9a15767563 118 }
nxp_ip 0:de9a15767563 119 }
nxp_ip 0:de9a15767563 120
nxp_ip 0:de9a15767563 121 #endif // CODE_FOR_PCA9665