首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教高人mc33389 canlin网关

请教高人mc33389 canlin网关

小弟用mc33389用作can-lin网关,兼作电源供电,写swcr的窗口操作怎么定时阿?有没有更多的资料可以参考以下,如果有代码的话最好了,不胜感激


email:280109609@qq.com

我得初始化
SPI_data1=RD33389(0x27,0xC7);//dog 200ms
//冷启动必读
//SPI_data1=RD33389(0x30,0x0); //读唤醒输入控制寄存器WUICR
//SPI_data1=RD33389(0x60,0x0); //读复位源寄存器RSR
//SPI_data1=RD33389(0x6C,0x0); //读电压补给状态寄存器VSSR
//唤醒后必读
SPI_data1=RD33389(0x30,0x0); //读唤醒输入控制寄存器WUICR
SPI_data1=RD33389(0x3c,0x0); //读唤醒输入状态寄存器WUISR
SPI_data1=RD33389(0x60,0x0); //读复位源寄存器RSR
SPI_data1=RD33389(0x6C,0x0); //读电压补给状态寄存器VSSR
//******************************************************
SPI_data1=RD33389(0x28,0x0); //基础电平寄存器
SPI_data1=RD33389(0x44,0x0); //读唤醒输入适时信息
SPI_data1=RD33389(0x50,0x0); //读CANH错误
SPI_data1=RD33389(0x5C,0x0); //读CANL错误
SPI_data1=RD33389(0x28,0x0); //基础电平寄存器
//
SPI_data1=RD33389(0x03,0x91);//标准模式
SPI_data1=RD33389(0x90,0x91);//标准模式
//
SPI_data1=RD33389(0x17,0x91);//V3ON
//SPI_data1=RD33389(0x33,0x32); //唤醒输入控制寄存器

//
SPI_data1=RD33389(0x2B,0x00);//0。7V
//SPI_data1=RD33389(0x2B,0x91);//-1.2V
//SPI_data1=RD33389(0x2B,0x32);//-1.7V
//SPI_data1=RD33389(0x2B,0xA3);//-2.2V
//CAN设置
SPI_data1=RD33389(0x93,0xA3);//RX/TX
//SPI_data1=RD33389(0x93,0x32);//RX
//SPI_data1=RD33389(0x93,0x00);//VBAT




//SPI_data1=RD33389(0x3C,0x0); //唤醒输入状态寄存器


//SPI_data1=RD33389(0x90,0x0); //传送控制寄存器
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!

zhwdy81你好

首先谢谢你的帮助,我是通过33993的wake脚来唤醒33389的,现在有个问题是,在33389V2 不供电的情况下,33993的wake脚维持低电平,怎样通过33993的wake脚来触发33389呢?[em13]
能帮忙解释下触发窗口的含义吗?谢谢

新问题

你好,zhwdy81
这是我采用你的mc33389初始化代码,为什么初始化后没有进入normal状态呢?

void Init_33389()
{
unsigned char RD33389(unsigned char cs_addr , unsigned char cs_cmd);
unsigned char WT33389(unsigned char cs_addr , unsigned char cs_cmd);
unsigned char SPI_data1;

SPI_data1=WT33389(CS_SWCR , 0x07) ; //看门狗设置200ms
//唤醒后必读
SPI_data1=RD33389(CS_WUICR , 0x00); //读唤醒输入控制寄存器WUICR
SPI_data1=RD33389(CS_WUISR , 0x00); //读唤醒输入状态寄存器WUISR
SPI_data1=RD33389(CS_RSR , 0x00); //读复位源寄存器RSR
SPI_data1=RD33389(CS_VSSR , 0x00); //读电压补给状态寄存器VSSR
//配置状态寄存器
//唤醒源配置 WUICR
SPI_data1=WT33389(CS_WUICR , 0x02); //唤醒输入L0,L1打开控制寄存器 写WUICR
SPI_data1=WT33389(CS_V3R , 0x04); //force wake up on 写V3R

}[em13]
不好意思啊 我也不是很清楚 我用到过看管唤醒和can唤醒 没用33993的wake脚
我得wake直接接的vbate
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
chenliang_hit
你的是什么问题啊 是不是没反应啊?
喂狗有没问题?
这个片子比较难用,我也是勉强用起来
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
对于chenliang_hit的问题

请教高人mc33389 canlin网关

小弟用mc33389用作can-lin网关,兼作电源供电,写swcr的窗口操作怎么定时阿?有没有更多的资料可以参考以下,如果有代码的话最好了,不胜感激

我的理解是MC33389上电后,正常的话会进入NormalRequest Mode,在75ms内需要对SPI操作,也就是必须先写SWCR(看门狗)。写入你需要的看门狗时间间隔后,必须在这个时间间隔的后半部分“喂狗”,比如如果选择100ms的看门狗时间间隔,那么必须在50ms后才能喂狗。如果你在前50ms内喂狗的话,会使芯片reset。
跟我的理解差不多,可是初始话时 默认值是5ms的狗 ,第一次如果设置成200ms的话,是不是要在100ms以后在写swcr,如果是那样的话,就有一个问题了,初始化的75毫秒时间内是触发不了看门狗的,这时就reset了; 如果窗口值按初试值设的话就应该,第一次在2.5ms后写SWCR设置成200ms,之后出现normal状态,以后按200ms算 ,不知道我这样理解对不对 [em13]
这是33389的初始化代码, 问题在后面描述

void Init_33389()
{
unsigned char RD33389(unsigned char cs_addr );
void WT33389(unsigned char cs_addr , unsigned char cs_cmd);

unsigned char SPI_data1;

/*数据格式转化在函数内部完成*/
/*狗设置200ms*/
WT33389(CS_SWCR , 0x07);

/*醒后必读*/
SPI_data1=RD33389(CS_WUICR );/*唤醒输入控制寄存器*/
SPI_data1=RD33389(CS_WUISR ); /*唤醒输入状态寄存器WUISR*/
SPI_data1=RD33389(CS_RSR ); /*读复位源寄存器RSR*/
SPI_data1=RD33389(CS_VSSR ); /*读电压补给状态寄存器VSSR*/

/*置状态寄存器*/
/*源配置 WUICR*/
WT33389(CS_WUICR , 0x02);/*唤醒输入L0,L1打开控制寄存器 写WUICR*/
WT33389(CS_V3R , 0x04); /* wake up on 写V3R*/

}


主函数目的是想要通过mc33993的wake pin 触发mc33389供电,现在问题是写SWCR寄存器后,mc33389并不进入normal状态,不知道是什么原因

void main(void)
{
/*配置CONFIG ,初始化MCU I/O方向*/
Init_MCU();

/*初始化SPI*/
Init_SPI();

/*初始化33389*/
Init_33389();

/*始化其他模块初始化*/
InitDelay(4000);

/*初始化33993,其中33993的VDD是通过mc33389的V2供电的, 33993 wake pin是接到33389的L0,为了正常初始化mc33993必须保证在mc33389处于normal状态的时候初始 化mc33993,这点怎么实现,如何判断mc33389何时进入normal状态.*/
Init_33993();

EnableInterrupts;
while(1)
{

}

}[em13]
在初始化33389前延时50几ms试一下呢
我在初始化前延时了 delay5ms(10);
喂狗在110ms左右
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
我已经实验出来结果了
normal request也有一个看门狗[em12]
不过还是非常的感谢你的帮助
返回列表