查看: 2189  |  回复: 3
M0+MAC+TCP/IP 以太网单芯片方案 W7500EVB用户手册连载(6)--实战篇
WSGustin
29
主题
48
回复
发表于2018-03-02 17:13:18 | 只看该作者
1# 电梯直达
W7500(W7500P)芯片简介: 
W7500 芯片为工业级以太网单芯片解决方案, 集成 ARM Cortex-M0,128KB Flash 及全硬件TCP/IP 核(和W5500、W5100内核一致),特别适用于物联网领域。 使用 W7500EVB, 让您轻松完成原型开发。

全硬件TCP/IP核的最大优点是他在执行联网操作时不需要占用MCU的运行资源,大大增加了MCU的工作效率。

这一章,将向大家介绍如何使用 W7500 的独立看门狗。W7500 内部自带了1个看门狗。在本章中,将通过按键来喂狗,然后串口2提示复位状态。

想了解更多关于WIZnet W7500更多信息,或者有技术问题请联系我们:gustin@wisioe.com
深圳炜世科技—WIZnet官方代理商,全程技术支持,价格绝对优势!
电话:0755-86568556

邮箱:support@wisioe.com


W7500EVB开发板指南.pdf 

WSGustin
29
主题
48
回复
发表于2018-03-02 17:22:02   |  只看该作者
2#

第七章 独立看门狗试验

这一章,将向大家介绍如何使用 W7500 的独立看门狗。W7500 内部自带了1个看门狗。在本章中,将通过按键来喂狗,然后串口2提示复位状态。
本章分为如下几个部分:
7.1 W7500
独立看门狗简介
7.2
硬件设计
7.3
软件设计
7.4
下载验证


7.1 W7500 独立看门狗简介

看门狗功能是基于一个 32 位递减计数器来实现的,这个32位的计数器可以通过看门狗的重装载寄存器来设置。该计数器在看门狗时钟的每个上升沿减1。并且当计数器递减到 0 之前没有进行喂狗,就发出一个复位信号。从而提供了一种将系统从程序崩溃状态中恢复的方式。

下面在了解一下与独立看门狗相关联的几个寄存器,之后再讲解怎么通过库函数来实现配置。首先是锁定寄存器WDTLock,如图7.1.1所示:

 


7.1.1 W7500 WDTLock寄存器

想要修改看门狗寄存器的值,就必须先要向WDTLock 寄存器中写入0x1ACCE551

这里可以调用 WDT_Unlock函数来解除WDT寄存器的写保护。

void WDT_Unlock(void);

想要设置看门狗的重装载值,可以调用WDT_SetWDTLoad函数。

void WDT_SetWDTLoad(uint32_t Load);

想要设置看门狗的控制寄存器可以调用WDT_SetWDTControl函数。

void WDT_SetWDTControl(uint32_t Control);

WDT_SetWDTControl主要是对看门狗的控制寄存器进行操作,如图7.1.2所示:

 



7.1.2 W7500 控制寄存器

void WDT_Start(void);

可以通过WDT_Start函数在指定的地方开启看门狗。

void WDT_ Stop(void);

WDT_ Stop函数可以在指定的地方停止看门狗的计数器。

void WDT_IntClear(void);

WDT_IntClear函数可以清除看门狗中断,同时计数器将重新装载WDTload的值。


7.2 硬件设计

本实验用到的硬件资源有:

1)      串口2

2)      按键

3)      看门狗

前面两个在之前都有介绍,而独立看门狗实验的核心是在 W7500 内部进行,并不需要外部电路。


7.3 软件设计

W7500EVB WDT工程里,可以看到工程里面新增了wdt.c文件和wdt.h文件。

wdt.c里面的代码如下:

void WDT_Configuration(uint32_t Load)
{
  WDT_InitTypeDef WDT_InitStruct; 
  WDT_InitStruct.WDTLoad = Load;               //加载值
  WDT_InitStruct.WDTControl_RstEn = 0x02;  //启用看门狗复位输出
  WDT_Init(&WDT_InitStruct); 
  WDT_IntClear();                                        //清除看门狗中断
  WDT_Start();                                            //启用计数器以及中断
}

在这里可以看到将结构体里的数据设置好后,通过WDT_Init函数进行对寄存器的配置,最后清除看门狗中断,就可以启动看门狗计数器了。

在主程序里面先初始化系统代码,然后在初始化外部中断按键和看门狗,并进入死循环打印计数器的当前计数值。只要按键按下就会进入中断服务函数里进行喂狗操作。

int main()
{
  SystemInit();     	           /* 系统内部时钟初始化 */ 
  delay_init();		           /* 系统滴答时钟配置*/
  S_UART_Init(115200);                /* 初始化串口通信:115200@8-n-2*/
  WDT_Configuration(0xffff00);      /* WDT初始化 */
  Exti_Init();                                 /* 按键外部中断 */
	
 /*------------------------------------------------------------------------------------------
  |  炜世科技—WIZnet W7500官方代理商,全程技术支持,价格绝对优势!|
  ------------------------------------------------------------------------------------------*/	
	
  printf("炜世科技W7500EVB\r\n\tWDT测试\r\n");
  while(1) 
  {
    printf("Value=%d\r\n",WDT_GetWDTValue());
    delay_ms(200);
if(flag)
{
     printf("喂狗成功!\r\n");
flag = 0;
}
  }
}


下面来看看的中断服务函数里的操作。

void EXTI_Handler(void)
{
uint16_t t = 65535;
while(t--);
   if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_12) == (uint32_t)Bit_RESET) 
   {
      WDT_IntClear();
      flag = 1;
   }
}


7.4 下载验证

在编译成功之后,下载代码到W7500EVB上,实际验证一下程序是否正确,如图7.4.1所示:

 


7.4.1 W7500EVB WDT试验结果




江湖老戴
0
主题
13
回复
发表于2018-03-02 18:29:51   |  只看该作者
3#
能够外扩 psram嘛?
WSGustin
29
主题
48
回复
发表于2018-03-05 13:57:02   |  只看该作者
4#
江湖老戴 发表于2018-03-02 18:29:51  3# 能够外扩psram嘛?
 

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部