【美信开发板系列试用体验】+max14001pmb配置说明和软件实现

  • 我爱下载
  • LV5工程师
  • |      2018-01-30 12:49:21
  • 浏览量 1651
  • 回复:0
本帖最后由 我爱下载 于 2018-2-2 08:12 编辑 通过研究手册,了解到max14001的配置过程如下图所示 这个是官方手册中推荐的配置流程。按照配置流程实现的代码如下: max14001通讯数据形成 uint16_t max14001_tdata_get(uint16_t data, uint8_t rw, uint8_t addr) { uint16_t tdata; if(rw == 1) //write tdata = (data & 0x3ff) | (1<<10) | (addr << 11); else tdata = (data & 0x3ff) | (0<<10) | (addr << 11); return tdata; } 寄存器读写配置函数 uint16_t max14001_readreg(uint8_t addr) { uint16_t tdata,rdata; tdata = max14001_tdata_get(0x0000, 0, addr); LPSPI1_transmit_16bits(tdata); /* Transmit half word (16 bits) on LPSPI1 */ LPSPI1_receive_16bits(); /* Receive half word on LSPI1 */ LPSPI1_transmit_16bits(tdata); /* Transmit half word (16 bits) on LPSPI1 */ rdata = LPSPI1_receive_16bits() & 0x03FF; /* Receive half word on LSPI1 */ return rdata; } void max14001_writereg(uint16_t data, uint8_t addr) { uint16_t tdata; tdata = max14001_tdata_get(data, 1, addr); LPSPI1_transmit_16bits(tdata); /* Transmit half word (16 bits) on LPSPI1 */ LPSPI1_receive_16bits(); /* Receive half word on LSPI1 */ } 按照配置流程要求完成的初始化函数。 uint8_t max14001_init(void) { uint16_t tdata,rdata; uint8_t ret = 1; char str; max14001_reset(); LPUART1_transmit_string("init max14001 \n\r"); /* Transmit char string */ //Read flags 0x100 rdata = max14001_readreg(0x02); rdata &= 0x1ff; sprintf(str,"flags=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ // if(rdata == 0x0100) //no errors { //write wen=0x294 max14001_writereg(0x294, 0x0C); //clear flten, mv rdata = max14001_readreg(0x03); rdata &= 0x1FF; // sprintf(str,"flten=%x\n\r",rdata); // LPUART1_transmit_string(str); /* Transmit char string */ rdata &= ~0x0100; //clr emv max14001_writereg(rdata, 0x03); //some config //write thl = 0x001 max14001_writereg(0x0001, 0x04); //write thu = 0x200 max14001_writereg(0x0200, 0x05); //write inrr = 0x0c0 max14001_writereg(0x00c0, 0x06); //write inrt = 0x180 max14001_writereg(0x0180, 0x07); //write inrp = 0x1d8 max14001_writereg(0x01d8, 0x08); //write cfg = 0x183 max14001_writereg(0x01AF, 0x09); //write act = 0x00 max14001_writereg(0x0000, 0x0B); //write enbl = 0 max14001_writereg(0x0000, 0x0A); //config verification //write thlv = 0x001 max14001_writereg(0x0001, 0x14); //write thuv = 0x200 max14001_writereg(0x0200, 0x15); //write inrrv = 0x0c0 max14001_writereg(0x00c0, 0x16); //write inrtv = 0x180 max14001_writereg(0x0180, 0x17); //write inrpv = 0x1d8 max14001_writereg(0x01d8, 0x18); //write cfgv = 0x183 max14001_writereg(0x01AF, 0x19); //write enblv = 0 max14001_writereg(0x0000, 0x1A); //write ftlen and fltev max14001_writereg(0x0000, 0x03); max14001_writereg(0x0000, 0x13); //write wen=0x000 max14001_writereg(0x000, 0x0C); //read config reg rdata = max14001_readreg(0x03); sprintf(str,"flten=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x04); sprintf(str,"thl=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x05); sprintf(str,"thu=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x06); sprintf(str,"inrr=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x07); sprintf(str,"inrt=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x08); sprintf(str,"inrp=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x09); sprintf(str,"cfg=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x0A); sprintf(str,"enbl=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x13); sprintf(str,"fltev=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x14); sprintf(str,"thlv=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x15); sprintf(str,"thuv=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x16); sprintf(str,"inrrv=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x17); sprintf(str,"inrtv=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x18); sprintf(str,"inrpv=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x19); sprintf(str,"cfgv=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x1A); sprintf(str,"enblv=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ //read flags twice rdata = max14001_readreg(0x02); sprintf(str,"flags=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x02); sprintf(str,"flags=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ // if(rdata == 0) //no error { //write wen=0x294 max14001_writereg(0x294, 0x0C); //write enbl = 0x0010 max14001_writereg(0x0010, 0x0A); //write enblv = 0x0010 max14001_writereg(0x0010, 0x1A); rdata = max14001_readreg(0x02); sprintf(str,"flags=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ rdata = max14001_readreg(0x02); sprintf(str,"flags=%x\n\r",rdata); LPUART1_transmit_string(str); /* Transmit char string */ // if(rdata == 0) //no error { //write wen=0x000 max14001_writereg(0x000, 0x0C); ret = 0; } // else //some error { } } // else //some error { } } // else //some errors { } return ret; } 这里总结几个问题: 1、按照手册中的说明,上电后读取FLAGS寄存器时,应该返回默认值0x100,但是实际上返回0x180,不知道原因出在哪里。 2、配置过程中,多次读取FLAGS寄存器,返回值与说明不符,不是返回0x000,而是0x080或0x090
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子