511 lines
15 KiB
C
511 lines
15 KiB
C
![]() |
// trs55d.c
|
|||
|
#include "system/includes.h"
|
|||
|
#include "app_config.h"
|
|||
|
#include "app_action.h"
|
|||
|
#include "app_main.h"
|
|||
|
#include "update.h"
|
|||
|
#include "update_loader_download.h"
|
|||
|
#include "app_charge.h"
|
|||
|
#include "app_power_manage.h"
|
|||
|
#include "asm/charge.h"
|
|||
|
#include "app_temperature.h"
|
|||
|
#include "typedef.h"
|
|||
|
|
|||
|
#include "le_common.h"
|
|||
|
#include "cpu.h"
|
|||
|
#include "timer.h"
|
|||
|
#include "os/os_api.h"
|
|||
|
#include "system/includes.h"
|
|||
|
|
|||
|
#include "gatt_common/le_gatt_common.h"
|
|||
|
#include "examples/trans_data/ble_trans_profile.h"
|
|||
|
|
|||
|
#include "asm/iic_soft.h"
|
|||
|
#include "trs55d.h"
|
|||
|
|
|||
|
#define IIC_CHANNEL_1 0
|
|||
|
const struct soft_iic_config soft_iic_cfg[] = {
|
|||
|
//iic0 data
|
|||
|
{
|
|||
|
.scl = IO_PORTA_07, //IIC CLK脚
|
|||
|
.sda = IO_PORTA_08, //IIC DAT脚
|
|||
|
.delay = 50, //软件IIC延时参数,影响通讯时钟频率
|
|||
|
.io_pu = 1, //是否打开上拉电阻,如果外部电路没有焊接上拉电阻需要置1
|
|||
|
},
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#if 1
|
|||
|
//如果无reg_addr:reg_addr=NULL,reg_len=0
|
|||
|
//return: <0:error, =read_len:ok
|
|||
|
int soft_i2c_master_read_nbytes_from_device_reg(soft_iic_dev iic, //iic索引
|
|||
|
unsigned char dev_addr, //设备地址
|
|||
|
int reg_addr, unsigned char reg_len,//设备寄存器地址,长度
|
|||
|
unsigned char *read_buf, int read_len)//缓存buf,读取长度
|
|||
|
{
|
|||
|
u8 ack;
|
|||
|
int ret = 0;
|
|||
|
|
|||
|
// 发送起始条件
|
|||
|
soft_iic_start(iic);
|
|||
|
|
|||
|
// 1. 发送设备地址(写模式)
|
|||
|
ack = soft_iic_tx_byte(iic, dev_addr & 0xFE);
|
|||
|
if (!ack) {
|
|||
|
printf("dev_addr no ack!\n");
|
|||
|
ret = -1;
|
|||
|
goto exit;
|
|||
|
}
|
|||
|
|
|||
|
// 2. 发送寄存器地址(支持多字节地址)
|
|||
|
if (reg_len > 0) {
|
|||
|
// 处理多字节地址(高位在前)
|
|||
|
uint8_t addr_buf[4];
|
|||
|
for (int i = reg_len - 1; i >= 0; i--) {
|
|||
|
addr_buf[i] = (reg_addr >> (8 * (reg_len - 1 - i))) & 0xFF;
|
|||
|
}
|
|||
|
|
|||
|
for (u8 i = 0; i < reg_len; i++) {
|
|||
|
ack = soft_iic_tx_byte(iic, addr_buf[i]);
|
|||
|
if (!ack) {
|
|||
|
printf("reg_addr no ack at byte %d!\n", i);
|
|||
|
ret = -1;
|
|||
|
goto exit;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 3. 发送重复起始条件
|
|||
|
soft_iic_start(iic);
|
|||
|
|
|||
|
// 4. 发送设备地址(读模式)
|
|||
|
ack = soft_iic_tx_byte(iic, dev_addr | 0x01);
|
|||
|
if (!ack) {
|
|||
|
printf("dev_addr (read) no ack!\n");
|
|||
|
ret = -1;
|
|||
|
goto exit;
|
|||
|
}
|
|||
|
|
|||
|
// 5. 读取数据
|
|||
|
ret = soft_iic_read_buf(iic, read_buf, read_len);
|
|||
|
|
|||
|
exit:
|
|||
|
// 发送停止条件
|
|||
|
soft_iic_stop(iic);
|
|||
|
return ret;
|
|||
|
/*
|
|||
|
u8 ack;
|
|||
|
int ret = 0;
|
|||
|
//local_irq_disable();
|
|||
|
//if (soft_iic_check_busy(iic) == IIC_ERROR_BUSY) { //busy
|
|||
|
// ret = IIC_ERROR_BUSY; //busy
|
|||
|
// goto _read_exit2;
|
|||
|
//}
|
|||
|
|
|||
|
if ((reg_addr != 0) && (reg_len != 0)) {
|
|||
|
soft_iic_start(iic);
|
|||
|
ack = soft_iic_tx_byte(iic, dev_addr);
|
|||
|
if (ack == 0) {
|
|||
|
printf("dev_addr no ack!");
|
|||
|
//ret = IIC_ERROR_DEV_ADDR_ACK_ERROR; //无应答
|
|||
|
ret = -1;
|
|||
|
goto _read_exit1;
|
|||
|
}
|
|||
|
|
|||
|
for (u8 i = 0; i < reg_len; i++) {
|
|||
|
ack = soft_iic_tx_byte(iic, reg_addr);
|
|||
|
if (ack == 0) {
|
|||
|
printf("reg_addr no ack!");
|
|||
|
//ret = IIC_ERROR_REG_ADDR_ACK_ERROR; //无应答
|
|||
|
ret = -1;
|
|||
|
goto _read_exit1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
soft_iic_start(iic);
|
|||
|
ack = soft_iic_tx_byte(iic, dev_addr | BIT(0));
|
|||
|
if (ack == 0) {
|
|||
|
printf("dev_addr no ack!");
|
|||
|
//ret = IIC_ERROR_DEV_ADDR_ACK_ERROR; //无应答
|
|||
|
goto _read_exit1;
|
|||
|
}
|
|||
|
|
|||
|
ret = soft_iic_read_buf(iic, read_buf, read_len);
|
|||
|
_read_exit1:
|
|||
|
soft_iic_stop(iic);
|
|||
|
|
|||
|
return ret;*/
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//如果无reg_addr:reg_addr=NULL,reg_len=0
|
|||
|
//return: =write_len:ok, other:error
|
|||
|
int soft_i2c_master_write_nbytes_to_device_reg(soft_iic_dev iic,
|
|||
|
unsigned char dev_addr, //设备地址
|
|||
|
int reg_addr, unsigned char reg_len,//设备寄存器地址,长度
|
|||
|
unsigned char *write_buf, int write_len)//数据buf, 写入长度
|
|||
|
{
|
|||
|
int res;
|
|||
|
u8 ack;
|
|||
|
//local_irq_disable();//软件iic不可被中断
|
|||
|
//if (soft_iic_check_busy(iic) == IIC_ERROR_BUSY) { //busy
|
|||
|
// res = IIC_ERROR_BUSY; //busy
|
|||
|
// goto _write_exit2;
|
|||
|
//}
|
|||
|
|
|||
|
soft_iic_start(iic);
|
|||
|
ack = soft_iic_tx_byte(iic, dev_addr);
|
|||
|
if (ack == 0) {
|
|||
|
printf("dev_addr no ack!");
|
|||
|
//res = IIC_ERROR_DEV_ADDR_ACK_ERROR; //无应答
|
|||
|
res = -1; //无应答
|
|||
|
goto _write_exit1;
|
|||
|
}
|
|||
|
|
|||
|
if ((reg_addr !=0 ) && (reg_len != 0)) {
|
|||
|
for (u8 i = 0; i < reg_len; i++) {
|
|||
|
ack = soft_iic_tx_byte(iic, reg_addr);
|
|||
|
if (ack == 0) {
|
|||
|
printf("reg_addr no ack!");
|
|||
|
//res = IIC_ERROR_REG_ADDR_ACK_ERROR; //无应答
|
|||
|
res = -1;
|
|||
|
goto _write_exit1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for (res = 0; res < write_len; res++) {
|
|||
|
if (0 == soft_iic_tx_byte(iic, write_buf[res])) {
|
|||
|
printf("write data no ack!");
|
|||
|
goto _write_exit1;
|
|||
|
}
|
|||
|
}
|
|||
|
_write_exit1:
|
|||
|
soft_iic_stop(iic);
|
|||
|
|
|||
|
return res;
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
static void udelay(u32 usec)
|
|||
|
{
|
|||
|
/* if (set_to_close_timer0_delay) { */
|
|||
|
/* JL_MCPWM->MCPWM_CON0 &= ~BIT(8 + 3); */
|
|||
|
/* JL_MCPWM->TMR3_CNT = 0; */
|
|||
|
/* JL_MCPWM->TMR3_PR = clk_get("lsb") / 1000000 * usec; */
|
|||
|
/* JL_MCPWM->TMR3_CON = BIT(10) | BIT(0); */
|
|||
|
/* JL_MCPWM->MCPWM_CON0 |= BIT(8 + 3); */
|
|||
|
/* while (!(JL_MCPWM->TMR3_CON & BIT(12))); */
|
|||
|
/* JL_MCPWM->TMR3_CON = BIT(10); */
|
|||
|
/* JL_MCPWM->MCPWM_CON0 &= ~BIT(8 + 3); */
|
|||
|
/* } else { */
|
|||
|
JL_TIMER0->CON = BIT(14);
|
|||
|
JL_TIMER0->CNT = 0;
|
|||
|
JL_TIMER0->PRD = 16 * 1000000L / 1000000L * usec; //1us
|
|||
|
JL_TIMER0->CON = BIT(0); //sys clk
|
|||
|
while ((JL_TIMER0->CON & BIT(15)) == 0);
|
|||
|
JL_TIMER0->CON = BIT(14);
|
|||
|
/* } */
|
|||
|
}
|
|||
|
|
|||
|
void TRS55D_Init(){
|
|||
|
#if 0
|
|||
|
//LCD VDD3.3
|
|||
|
pmu_set_aldo_voltage(PMU_ALDO_MODE_NORMAL,PMU_ALDO_VOL_3_3);
|
|||
|
//LCD RESET
|
|||
|
system_set_port_mux(GPIO_PORT_A,GPIO_BIT_4,PORTA4_FUNC_A4);
|
|||
|
gpio_set_dir(GPIO_PORT_A, GPIO_BIT_4, GPIO_DIR_OUT);
|
|||
|
gpio_set_pin_value(GPIO_PORT_A,GPIO_BIT_4,1);
|
|||
|
co_delay_100us(1000);
|
|||
|
system_set_port_mux(GPIO_PORT_A, GPIO_BIT_6, PORTA6_FUNC_I2C1_CLK);//Pa6
|
|||
|
system_set_port_mux(GPIO_PORT_A, GPIO_BIT_7, PORTA7_FUNC_I2C1_DAT);//Pa7
|
|||
|
system_set_port_pull( (GPIO_PA6|GPIO_PA7), true);
|
|||
|
//IIC0, 1M hz. slave addr: 0xd6
|
|||
|
iic_init(IIC_CHANNEL_1,100,TRS_ADDR_AD);
|
|||
|
soft_iic_init(0);
|
|||
|
#endif
|
|||
|
|
|||
|
//打开电源
|
|||
|
gpio_set_direction(IO_PORTA_02,0);
|
|||
|
gpio_direction_output(IO_PORTA_02, 1);
|
|||
|
//初始化IIC
|
|||
|
soft_iic_init(IIC_CHANNEL_1);
|
|||
|
}
|
|||
|
uint8_t TRS55D_IIC_Read(uint8_t addr_dev, uint8_t addr_reg, uint8_t *buf, uint16_t count)
|
|||
|
{
|
|||
|
|
|||
|
#if 0
|
|||
|
uint8_t ret;
|
|||
|
uint8_t ackflag;
|
|||
|
uint16_t i = 0;
|
|||
|
/*
|
|||
|
drv_i2c_start();
|
|||
|
drv_i2c_select_dev(addr_dev,DRV_I2C_OPWR);
|
|||
|
drv_i2c_writebyte(addr_reg);
|
|||
|
drv_i2c_start();
|
|||
|
drv_i2c_select_dev(addr_dev,DRV_I2C_OPRD);
|
|||
|
for(i = 0; i < count; i ++) {
|
|||
|
ackflag = (i < (count-1)) ? 1:0; buf[i] = drv_i2c_readbyte(ackflag);
|
|||
|
}
|
|||
|
drv_i2c_stop();
|
|||
|
*/
|
|||
|
|
|||
|
iic_read_bytes(IIC_CHANNEL_1, addr_dev, addr_reg, buf, count);
|
|||
|
|
|||
|
return ret;
|
|||
|
#endif
|
|||
|
//soft_iic_read_buf(IIC_CHANNEL_1, buf, count);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,
|
|||
|
addr_dev, //设备地址
|
|||
|
addr_reg, 1,//设备寄存器地址,长度
|
|||
|
buf, count);//数据buf, 写入长度
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
void TRS55D_IIC_Write(uint8_t addr_dev, uint8_t addr_reg, uint8_t *buf, uint16_t count)
|
|||
|
{
|
|||
|
uint16_t i = 0;
|
|||
|
/*
|
|||
|
drv_i2c_start();
|
|||
|
drv_i2c_select_dev(addr_dev,DRV_I2C_OPWR);
|
|||
|
drv_i2c_writebyte(addr_reg);
|
|||
|
for (i = 0; i < count; i ++)
|
|||
|
{
|
|||
|
drv_i2c_writebyte(buf[i]);
|
|||
|
}
|
|||
|
drv_i2c_stop();
|
|||
|
*/
|
|||
|
// iic_write_bytes(IIC_CHANNEL_1,addr_dev,addr_reg,buf,count);
|
|||
|
|
|||
|
//soft_iic_write_buf(IIC_CHANNEL_1, buf, count);
|
|||
|
|
|||
|
soft_i2c_master_write_nbytes_to_device_reg(IIC_CHANNEL_1,
|
|||
|
addr_dev, //设备地址
|
|||
|
addr_reg, 1,//设备寄存器地址,长度
|
|||
|
buf, count);//数据buf, 写入长度
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static char buffer[264];
|
|||
|
uu32_t obj,tmp_3, vtp_cor;
|
|||
|
float tamb_temp ,vtp_cor_uv ,Tobj_temp ;
|
|||
|
|
|||
|
//#include "FW_TRS_CAL.h"
|
|||
|
uint16_t t_objx10_u16;
|
|||
|
int16_t Tambx10_u16;
|
|||
|
uint16_t Trs_Read(uint16_t *t_body, uint16_t *t_ntc)
|
|||
|
{
|
|||
|
|
|||
|
uint8_t rbuf[4];
|
|||
|
uint8_t raddr, rdat;
|
|||
|
uint8_t waddr = 0x0, wdat = 0x0;
|
|||
|
int timeout = 0;
|
|||
|
|
|||
|
waddr = 0x30; // CMD
|
|||
|
wdat = 0x09; // 0x0000 1 FSM 001 单通道连续转换
|
|||
|
TRS55D_IIC_Write(TRS_ADDR_AD, waddr, &wdat, 1); // start conversion 模式使能
|
|||
|
udelay(100);
|
|||
|
raddr = 0x03; // 原始数据地址
|
|||
|
do
|
|||
|
{
|
|||
|
TRS55D_IIC_Read(TRS_ADDR_AD, raddr, &rdat, 1);
|
|||
|
} while (((rdat == 0xFF) || (!(rdat & 0x30))) && timeout++ < 100); // 全真为真
|
|||
|
// flag置1 结果为真 取反为假跳出循环
|
|||
|
raddr = 0x02; // 经过校准后的数据地址
|
|||
|
do
|
|||
|
{
|
|||
|
TRS55D_IIC_Read(TRS_ADDR_AD, raddr, &rdat, 1);
|
|||
|
} while (((rdat == 0xFF) || (!(rdat & 0x0B))) && timeout++ < 200);
|
|||
|
// flag置1 结果为真 取反为假跳出循环
|
|||
|
udelay(500);
|
|||
|
|
|||
|
// raddr = NORMAL_DATA1_MSB_R;//0x19 通道1校准后adc数据
|
|||
|
|
|||
|
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x19, &rbuf[0]);
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x1A, &rbuf[1]);
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x1B, &rbuf[2]);
|
|||
|
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x19, 1,&rbuf[0], 1);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x1A, 1,&rbuf[1], 1);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x1B, 1,&rbuf[2], 1);
|
|||
|
|
|||
|
|
|||
|
//printf("0x19:%02X 0x1A:%02X 0x1B:%02X \r\n", rbuf[0], rbuf[1], rbuf[2]);
|
|||
|
|
|||
|
vtp_cor.un.u8b2 = rbuf[0];
|
|||
|
vtp_cor.un.u8b1 = rbuf[1];
|
|||
|
vtp_cor.un.u8b0 = rbuf[2];
|
|||
|
if (vtp_cor.un.u8b2 & 0x80)
|
|||
|
{
|
|||
|
vtp_cor.un.u8b3 = 0xFF;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
vtp_cor.un.u8b3 = 0x00;
|
|||
|
}
|
|||
|
float vt_cor = 524288;
|
|||
|
vtp_cor_uv = (float)vtp_cor.i32 / vt_cor; // vtp_cor_uv=DATA1/2^19(±16mV)=vtp_cor.i32/vt_cor
|
|||
|
vtp_cor_uv *= 1000.0;
|
|||
|
|
|||
|
// raddr = NORMAL_TEMP_MSB_R;//0x16环境校准后温度
|
|||
|
// TRS55D_IIC_Read (TRS_ADDR_AD, raddr, &rbuf[0],3);
|
|||
|
// uint8_t iic_read_byte(enum iic_channel_t channel, uint8_t slave_addr, uint8_t reg_addr, uint8_t *buffer)
|
|||
|
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x16, &rbuf[0]);
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x17, &rbuf[1]);
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x18, &rbuf[2]);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x16, 1,&rbuf[0], 1);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x17, 1,&rbuf[1], 1);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x18, 1,&rbuf[2], 1);
|
|||
|
|
|||
|
//printf("0x16:%02X 0x17:%02X 0x18:%02X \r\n", rbuf[0], rbuf[1], rbuf[2]);
|
|||
|
|
|||
|
tmp_3.un.u8b2 = rbuf[0];
|
|||
|
tmp_3.un.u8b1 = rbuf[1];
|
|||
|
tmp_3.un.u8b0 = rbuf[2];
|
|||
|
if (tmp_3.un.u8b2 & 0x80)
|
|||
|
{
|
|||
|
tmp_3.un.u8b3 = 0xFF;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
tmp_3.un.u8b3 = 0x00;
|
|||
|
}
|
|||
|
|
|||
|
// raddr = NORMAL_Tobj_MSB_R;//0x10 dsp处理数据据
|
|||
|
// TRS55D_IIC_Read (TRS_ADDR_AD, raddr, &rbuf[0],3);
|
|||
|
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x10, &rbuf[0]);
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x11, &rbuf[1]);
|
|||
|
//iic_read_byte(IIC_CHANNEL_1, TRS_ADDR_AD, 0x12, &rbuf[2]);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x10, 1,&rbuf[0], 1);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x11, 1,&rbuf[1], 1);
|
|||
|
soft_i2c_master_read_nbytes_from_device_reg(IIC_CHANNEL_1,TRS_ADDR_AD,0x12, 1,&rbuf[2], 1);
|
|||
|
|
|||
|
//printf("0x10:%02X 0x11:%02X 0x12:%02X \r\n", rbuf[0], rbuf[1], rbuf[2]);
|
|||
|
|
|||
|
obj.un.u8b2 = rbuf[0];
|
|||
|
obj.un.u8b1 = rbuf[1];
|
|||
|
obj.un.u8b0 = rbuf[2];
|
|||
|
if (obj.un.u8b2 & 0x80)
|
|||
|
{
|
|||
|
obj.un.u8b3 = 0xFF;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
obj.un.u8b3 = 0x00;
|
|||
|
}
|
|||
|
// co_printf("NORMAL_Tobj_MSB_R :%02X %02X %02X\r\n",rbuf[0],rbuf[1],rbuf[2]);
|
|||
|
|
|||
|
//printf("tmp_3.i32: %d obj.i32: %d \r\n", tmp_3.i32, obj.i32);
|
|||
|
|
|||
|
Cal_get_temp(tmp_3.i32, 1000, obj.i32, 1000, &Tambx10_u16, &t_objx10_u16);
|
|||
|
Tobj_temp = (float)t_objx10_u16 / 10;
|
|||
|
tamb_temp = (float)Tambx10_u16 / 10;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
*t_body = (uint16_t)(Tobj_temp * 100);
|
|||
|
*t_ntc = (uint16_t)(tamb_temp * 100);
|
|||
|
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
static char buffer[264];
|
|||
|
uu32_t tobj, tamb_cal;
|
|||
|
uu32_t vtp_cor;
|
|||
|
float vtp_uv_f = 0.0;
|
|||
|
float vtp_cor_f = 0.0;
|
|||
|
float tambf = 0.0;
|
|||
|
float tobjf = 0.0;
|
|||
|
float tbdyf = 0.0;
|
|||
|
|
|||
|
void TRS55D_read(void){
|
|||
|
|
|||
|
co_printf("TRS55D_read !! \r\n");
|
|||
|
uint8_t rbuf[4];
|
|||
|
uint8_t raddr,rdat;
|
|||
|
uint8_t waddr = 0x0, wdat = 0x0;
|
|||
|
int timeout=0;
|
|||
|
|
|||
|
iic_read_byte(IIC_CHANNEL_1, ADDR_TRS55D, 0x97, &rdat);
|
|||
|
co_printf("read raddr :%02X rdat %02X\r\n",0x97,rdat);
|
|||
|
co_delay_100us(1000);
|
|||
|
waddr = 0x30; wdat = 0x09;
|
|||
|
TRS55D_IIC_Write(ADDR_TRS55D, waddr, &wdat,1); //start conversion
|
|||
|
//delay_ms(100);
|
|||
|
co_delay_100us(1000);
|
|||
|
// waite for conversion over
|
|||
|
// co_printf("waite for conversion over !! \r\n");
|
|||
|
raddr = 0x03;
|
|||
|
do {
|
|||
|
TRS55D_IIC_Read (ADDR_TRS55D, raddr, &rdat,1);
|
|||
|
co_printf("read raddr :%02X rdat %02X\r\n",raddr,rdat);
|
|||
|
} while(((rdat == 0xFF) || (!(rdat & 0x30))) && timeout++ < 200);
|
|||
|
raddr = 0x02;
|
|||
|
do {
|
|||
|
TRS55D_IIC_Read (ADDR_TRS55D, raddr, &rdat,1);
|
|||
|
co_printf("read raddr :%02X rdat %02X\r\n",raddr,rdat);
|
|||
|
} while(((rdat == 0xFF) || (!(rdat & 0x0B))) && timeout++ < 200);
|
|||
|
// voltage value after calibration
|
|||
|
raddr = TRS55D_NORMAL_DATA1_MSB_R;
|
|||
|
TRS55D_IIC_Read (ADDR_TRS55D, raddr,&rbuf[0],3);
|
|||
|
|
|||
|
co_printf("NORMAL_DATA1_MSB_R :%02X %02X %02X\r\n",rbuf[0],rbuf[1],rbuf[2]);
|
|||
|
vtp_cor.un.u8b2 = rbuf[0];
|
|||
|
vtp_cor.un.u8b1 = rbuf[1];
|
|||
|
vtp_cor.un.u8b0 =rbuf[2];
|
|||
|
if (vtp_cor.un.u8b2 & 0x80)
|
|||
|
{
|
|||
|
vtp_cor.un.u8b3 = 0xFF;
|
|||
|
}else {
|
|||
|
vtp_cor.un.u8b3 = 0x00;// vtp after corrected
|
|||
|
}
|
|||
|
vtp_cor_f = (float)vtp_cor.i32/524288.0;
|
|||
|
vtp_cor_f *= 1000;
|
|||
|
// ambient temperature value after calibration
|
|||
|
raddr = TRS55D_NORMAL_TEMP_MSB_R;
|
|||
|
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rbuf[0],3);
|
|||
|
co_printf("NORMAL_TEMP_MSB_R :%02X %02X %02X\r\n",rbuf[0],rbuf[1],rbuf[2]);
|
|||
|
tamb_cal.un.u8b2 = rbuf[0];
|
|||
|
tamb_cal.un.u8b1 =rbuf[1];
|
|||
|
tamb_cal.un.u8b0 =rbuf[2];
|
|||
|
tambf = (float)tamb_cal.i32 / 16384.0;
|
|||
|
// ambient temperature
|
|||
|
// object(surface) temperature after calibration
|
|||
|
raddr = TRS55D_NORMAL_Tobj_MSB_R;
|
|||
|
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rbuf[0],3);
|
|||
|
tobj.un.u8b2 = rbuf[0];
|
|||
|
tobj.un.u8b1 = rbuf[1];
|
|||
|
tobj.un.u8b0 =rbuf[2];
|
|||
|
|
|||
|
tobjf = (float)tobj.i32 / 16384.0;
|
|||
|
sprintf(buffer, "tambf = %.2f, vtp_cor = %.2f, tobj = %.2f, tbdy = %.2f\r\n",tambf,vtp_cor_f,tobjf,tbdyf);
|
|||
|
co_printf("%s \r\n",buffer);
|
|||
|
|
|||
|
//co_printf("tambf:%.2f vtp_cor_f:%.2f tobjf:%.2f \r\n",tambf,vtp_cor_f,tobjf);
|
|||
|
// object(surface) temperature
|
|||
|
// get bodytemp
|
|||
|
//tbdyf = get_body_temp(tambf,tobjf);
|
|||
|
// get bodytemp
|
|||
|
// display on uart
|
|||
|
// sprintf(buffer, "tamb = %.2f, vtp_cor = %.2f, tobj = %.2f, tbdy = %.2f\r\n",\tambf,vtp_cor_f,tobjf,tbdyf);
|
|||
|
//uartSendString(buffer);
|
|||
|
// display on oled
|
|||
|
/*
|
|||
|
float vals[4] = {tambf, vtp_cor_f, tobjf, tbdyf+0.05};
|
|||
|
OLED_ShowBNum(64, 0, vals[0], 4, 16, 1); // Tamb
|
|||
|
OLED_ShowBNum(48, 16, vals[1], 6, 16, 1); // vtp
|
|||
|
OLED_ShowString(112,16,"uv",16, 1);
|
|||
|
OLED_ShowBNum(64, 32, vals[2], 4, 16, 1); // Tobj
|
|||
|
OLED_ShowBNum(64, 48, vals[3], 4, 16, 1); // Tbdy
|
|||
|
*/
|
|||
|
//}*/
|
|||
|
|