OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32/FPGA开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 2356|回复: 1

M0+MAC+TCP/IP 以太网单芯片方案 W7500EVB用户手册连载(7)--实战篇

[复制链接]

  离线 

28

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2018-2-23
在线时间
24 小时
发表于 2018-3-5 14:50:04 | 显示全部楼层 |阅读模式
W7500(W7500P)芯片简介:
W7500 芯片为工业级以太网单芯片解决方案, 集成 ARM Cortex-M0,128KB Flash 及全硬件TCP/IP 核(和W5500、W5100内核一致),特别适用于物联网领域。 使用 W7500EVB, 让您轻松完成原型开发。

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

这一章将向大家介绍如何使用W7500的双定时器,将利用双定时器0_0的定时器中断来控制串口2发送数据。

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

使用道具 举报

  离线 

28

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2018-2-23
在线时间
24 小时
 楼主| 发表于 2018-3-5 14:54:13 | 显示全部楼层
第八章 双定时器中断试验
这一章将向大家介绍如何使用W7500的双定时器,将利用双定时器0_0的定时器中断来控制串口2发送数据。
本章分为如下几个部分:
8.1 W7500双定时器简介
8.2 硬件设计
8.3 软件设计
8.4 下载验证

8.1 W7500双定时器简介
W7500的一个双定时器有两个可编程的定时器,它们都是可以自由运行的定时器,当它们达到0时可以触发中断。W7500有两个双定时器。一个双定时器有一个中断处理程序。用户可以选择重复模式单次触发或者循环模式,且循环模式包括自由运行及周期模式。两个定时器是一组,所以有一个时钟及一个中断,但是每个定时器有一个单独的使能位。
W7500 的双定时器特点:
u  一个双定时器有两个自由运行的定时器。
u  一个双定时器有一个时钟及一个中断处理程序。
u  一个双定时器有两个使能信号。
u  W7500有两个双定时器。
u  一个双定时器有两个可编程的定时器。
u  单次触发模式和循环模式 。
u  自由运行模式和周期模式。
u  有一个预分频器可将时钟频率下分频为1、16或256。
为了深入了解 W7500双定时器的通用寄存器,下面介绍一下与本章的试验相关的通用双定时器的寄存器。
首先是控制寄存器(DUAL 定时器 0_0 定时器控制),如图8.1.1所示:
1.JPG
2.JPG
3.JPG
图8.1.1 W7500 DUAL 定时器 0_0 定时器控制寄存器
首先来看看DUAL 定时器 0_0 定时器控制寄存器的最低位,这位选择定时器的计数模式。
DUAL 定时器 0_0 定时器控制寄存器的第1位,用来选择定时器的大小。
DUAL 定时器 0_0 定时器控制寄存器的第2位到第3位,用来选择定时器的分频。
DUAL 定时器 0_0 定时器控制寄存器的第5位,用来使能或禁止定时器中断。
然后在来看看DUAL 定时器 0_0 定时器控制寄存器的第6位,用来控制定时器的工作模式。
自由运行模式:在定时器达到 0 值之后,定时器进行重装载,然后从最大值递减计数。
周期模式:定时器从装载值递减到0,然后重新装载计数值。
在库函数中,定时器的初始化可以通过DUALTIMER_Init函数来实现:
[AppleScript] 纯文本查看 复制代码
void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DULATIMER_InitTypDef* DUALTIMER_InitStruct);
第一个参数是确定是哪个定时器,这个比较容易理解。 第二个参数是定时器初始化参数结构体指针,结构体类型为 TIM_TimeBaseInitTypeDef,下面我们看看这个结构体的定义:
[AppleScript] 纯文本查看 复制代码
typedef struct
{
    uint32_t TimerLoad; 
    uint32_t TimerControl_Mode; 
    uint32_t TimerControl_Pre; 
    uint32_t TimerControl_Size; 
    uint32_t TimerControl_OneShot; 
}DULATIMER_InitTypDef;
成员一TimerLoad:设置定时器的装载值。
       成员二TimerControl_Mode:定时器处于的工作模式。
       成员三TimerControl_Pre:定时器的预分频。
       成员四TimerControl_Size:定时器的大小。
       成员五TimerControl_OneShot:单次触发计数。
针对定时器0_0 初始化范例代码格式:
[AppleScript] 纯文本查看 复制代码
DULATIMER_InitTypDef DUALTIMER_InitStruct; 
DUALTIMER_InitStruct.TimerLoad = 0xFFFFF; 
DUALTIMER_InitStruct.TimerControl_Mode = 1; 
DUALTIMER_InitStruct.TimerControl_Pre = 1; 
DUALTIMER_InitStruct.TimerControl_Size = 1; 
DUALTIMER_InitStruct.TimerControl_OneShot = 0; 
DUALTIMER_Init(DUALTIMER0_0, &DUALTIMER_InitStruct); 
DUALTIMER_ClockEnable(DUALTIMER0_0); 
DUALTIMER_Start(DUALTIMER0_0); 
NVIC_ClearPendingIRQ(DUALTIMER0_IRQn); 
NVIC_EnableIRQ(DUALTIMER0_IRQn);
因为双定时器中断是默认使能的,所以这里没有设置中断使能,如果需要关闭中断的话可以调用DUALTIMER_IntConfig函数。
[AppleScript] 纯文本查看 复制代码
void DUALTIMER_IntConfig(DUALTIMER_TypeDef* DUALTIMERn, FunctionalState state);
DUALTIMER_IntConfig函数非常简单,比如要禁止定时器 0_0中断的方法是:
[AppleScript] 纯文本查看 复制代码
DUALTIMER_IntConfig(DUALTIMER0_0, DISABLE);
8.2 硬件设计
本实验用到的硬件资源有:
1)      串口2
2)      双定时器0_0
8.3 软件设计
在W7500EVB DUALTIMER工程中的user下面比以前多了dualtimer.c 文件和头文件dualtimer.h。同时还引入了定时器相关的固件库函数文件 W7500x_dualtimer.c 和头文件W7500x_dualtimer.h。
下面来看看我们的dualtimer.c 文件。
[AppleScript] 纯文本查看 复制代码
void Dualtimer_Init(void)
{
  DULATIMER_InitTypDef DUALTIMER_InitStruct; 
  DUALTIMER_InitStruct.TimerLoad = 0xFFFFF;      //装载值
  DUALTIMER_InitStruct.TimerControl_Mode = 1;   //定时器处于周期模式
  DUALTIMER_InitStruct.TimerControl_Pre = 1;      //0 字段频分,时钟除以 1,默认; 
  DUALTIMER_InitStruct.TimerControl_Size = 1;     //32 位计数器
  DUALTIMER_InitStruct.TimerControl_OneShot = 0;//环绕模式
  DUALTIMER_Init(DUALTIMER0_0, &DUALTIMER_InitStruct); 
  DUALTIMER_ClockEnable(DUALTIMER0_0);          //使能定时器0_0
  DUALTIMER_Start(DUALTIMER0_0);                    //开始定时器0_0
  /* NVIC 配置 */
  NVIC_ClearPendingIRQ(DUALTIMER0_IRQn); 
  NVIC_EnableIRQ(DUALTIMER0_IRQn); 
}
这里将定时器0_0的重装载值设置成0xFFFFF,定时器的工作模式为周期模式,每当定时器0_0计数器到0的时候就会重新装载并进入定时器中断服务函数。
在来看看W7500x_it.c文件。
[AppleScript] 纯文本查看 复制代码
void DUALTIMER0_Handler(void) 
{
  if(DUALTIMER_GetIntStatus(DUALTIMER0_0) == SET) 
  {
    flah = 1;
    DUALTIMER_IntClear(DUALTIMER0_0); 
  }
}
因为一个双定时器只有一个中断服务函数,所以进入中断后判断是哪个定时器触发了中断并执行相对应的函数。
8.4下载验证
在完成软件设计之后,将编译好的文件下载到W7500EVB 开发板上,观看运行结果是否与我们编写的一致。如果没有错误,可以看到W7500每隔一段时间就发送一次数据,如图8.4.1所示:
4.JPG
图8.4.1 双定时器试验结果



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

正点原子STM32/FPGA资料免费洗澡上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-12-17 13:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */