nes-proj/arch/platform/z1/dev/tlc59116.h

143 lines
5.2 KiB
C

/*
* Copyright (c) 2013, Jelmer Tiete.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the Contiki operating system.
*
*/
/**
* \file
* Device drivers header file for TLC59116 i2c led driver on Zolertia Z1.
* See http://www.ti.com/product/tlc59116 for datasheet.
* \author
* Jelmer Tiete, VUB <jelmer@tiete.be>
*/
#ifndef TLC59116_H_
#define TLC59116_H_
#include <stdio.h>
#include "dev/i2cmaster.h"
#if 0
#include <stdio.h>
#define PRINTFDEBUG(...) printf(__VA_ARGS__)
#else
#define PRINTFDEBUG(...)
#endif
/* -------------------------------------------------------------------------- */
/* Init the led driver: ports, pins, registers, I2C*/
void tlc59116_init(void);
/* Write to a register.
* args:
* reg register to write to
* val value to write
*/
void tlc59116_write_reg(uint8_t reg, uint8_t val);
/* Write several registers from a stream.
* args:
* len number of bytes to read
* data pointer to where the data is read from
* First byte in stream must be the register address to begin writing to.
* The data is then written from the second byte and increasing. The address byte
* is not included in length len.
*/
void tlc59116_write_stream(uint8_t len, uint8_t * data);
/* Read one register.
* args:
* reg what register to read
* returns the value of the read register
*/
uint8_t tlc59116_read_reg(uint8_t reg);
/* Read several registers in a stream.
* args:
* reg what register to start reading from
* len number of bytes to read
* whereto pointer to where the data is saved
*/
void tlc59116_read_stream(uint8_t reg, uint8_t len, uint8_t * whereto);
/* Set pwm value for individual led
* args:
* led led output -> 0 till 15
* pwm led pwm value
*/
void tlc59116_led(uint8_t led, uint8_t pwm);
/* -------------------------------------------------------------------------- */
/* Application definitions, change if required by application. */
/* Suggested defaults according to the data sheet etc */
#define TLC59116_MODE1_DEFAULT 0x00 /* Default (no sub or all call) + OSC on */
#define TLC59116_MODE2_DEFAULT 0x00 /* Default (output change on stop) */
#define TLC59116_LEDOUT_PWM 0xAA /* LDRx = 01 -> PWM; 4 leds per reg: 01010101b -> 0xAA */
/* -------------------------------------------------------------------------- */
/* Reference definitions, should not be changed */
/* TLC59116 slave address */
#define TLC59116_ADDR 0x60 /* 7bit adress, 8bit write adress: 0xC0 */
/* address with all address pins pulled to ground */
/* TLC59116 registers */
#define TLC59116_MODE1 0x00
#define TLC59116_MODE2 0x01
#define TLC59116_PWM0_AUTOINCR 0xA2 /* auto increment address for first pwm register */
#define TLC59116_PWM0 0x02
#define TLC59116_PWM1 0x03
#define TLC59116_PWM2 0x04
#define TLC59116_PWM3 0x05
#define TLC59116_PWM4 0x06
#define TLC59116_PWM5 0x07
#define TLC59116_PWM6 0x08
#define TLC59116_PWM7 0x09
#define TLC59116_PWM8 0x0A
#define TLC59116_PWM9 0x0B
#define TLC59116_PWM10 0x0C
#define TLC59116_PWM11 0x0D
#define TLC59116_PWM12 0x0E
#define TLC59116_PWM13 0x0F
#define TLC59116_PWM14 0x10
#define TLC59116_PWM15 0x11
#define TLC59116_GRPPWM 0x12
#define TLC59116_GRPFREQ 0x13
#define TLC59116_LEDOUT0 0x14
#define TLC59116_LEDOUT1 0x15
#define TLC59116_LEDOUT2 0x16
#define TLC59116_LEDOUT3 0x17
/* More registers follow, but not used in this implementation */
/* -------------------------------------------------------------------------- */
#endif /* ifndef TLC59116_H_ */