野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6893|回复: 1

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

[复制链接]
发表于 2018-3-2 17:53:43 | 显示全部楼层 |阅读模式
W7500(W7500P)芯片简介:
W7500 芯片为工业级以太网单芯片解决方案, 集成 ARM Cortex-M0,128KB Flash 及全硬件TCP/IP 核(和W5500、W5100内核一致),特别适用于物联网领域。 使用 W7500EVB, 让您轻松完成原型开发。
全硬件TCP/IP核的最大优点是他在执行联网操作时不需要占用MCU的运行资源,大大增加了MCU的工作效率。

这一章,将向大家介绍如何使用 W7500 的外部输入中断。在前面几章的学习中,我们掌握了W7500 的 IO 口最基本的操作。 本章介绍如何将W7500 的 IO 口作为外部中断来使用。

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



回复

使用道具 举报

 楼主| 发表于 2018-3-2 18:00:42 | 显示全部楼层
第六章 外部中断试验
这一章,将向大家介绍如何使用 W7500 的外部输入中断。在前面几章的学习中,我们掌握了W7500 的 IO 口最基本的操作。 本章介绍如何将W7500 的 IO 口作为外部中断来使用。
本章分为如下几个部分:
6.1 W7500 外部中断简介
6.2 硬件设计
6.3 软件设计
6.4 下载验证


6.1 W7500 外部中断简介
这里将介绍 W7500 IO 口的外部中断功能,通过外部中断功能,达到本章试验的效果,即:通过W7500EVB的功能按键,控制板载的 UART2 发送数据。
这章的代码主要分布在固件库的 W7500x_exti.h 和 W7500x_exti.c 文件中。
这里首先介绍一下 W7500 IO 口外部中断的一些基础概念。W7500的每个 IO 都可以作为外部中断的中断输入口。W7500的中断控制器只有1个外部中断/事件请求。
外部中断的初始化是通过 EXTI_Init函数实现的。
  1. void EXTI_Init(PAD_Type Px, EXTI_InitTypeDef* EXTI_InitStruct);
复制代码
下面用一个使用范例来说明EXTI_Init函数的使用。
  1. EXTI_InitTypeDef EXTI_InitDef;
  2. EXTI_InitDef.EXTI_Line = GPIO_Pin_12;
  3. EXTI_InitDef. EXTI_Mode = EXTI_Mode_Interrupt;
  4. EXTI_InitDef.EXTI_Trigger = EXTI_Trigger_Falling;
  5. EXTI_Init(PAD_PC, &EXTI_InitDef);
  6. NVIC_ClearPendingIRQ(EXTI_IRQn);
  7. NVIC_EnableIRQ(EXTI_IRQn);
复制代码
例子中选择了PC12作为外部中断源,中断的模式为外部中断,中断触发条件为下降沿触发。在来看看结构体EXTI_InitTypeDef 的成员变量。
  1. typedef struct
  2. {
  3.   uint32_t EXTI_Line;
  4.   EXTIMode_TypeDef EXTI_Mode;
  5.   EXTITrigger_TypeDef EXTI_Trigger;
  6. }EXTI_InitTypeDef;
复制代码
从定义中可以看出,有3个参数需要设置。第一个参数是中断线的标号,取值范围为GPIO_Pin0~GPIO_Pin15。 第二个参数是中断模式,可选值为中断EXTI_Mode_Interrupt 和事件EXTI_Mode_Disable。第三个参数是触发方式,可以是下降沿触发 EXTI_Trigger_Falling或上升沿触发EXTI_Trigger_Rising。
在配置完外部中断之后,接着要做的就是编写中断服务函数。在W7500x_it.c中事先有定义中断服务函数。这里需要说明一下,W7500 的 IO 口外部中断服务函数只有1个,所以进入中断后需要判断是哪个引脚触发了外部中断。

6.2 硬件设计
本实验用到的硬件资源有:
1)     UART2
2)     按键
3)     EXTI外部中断

6.3 软件设计
在W7500EVB EXTI工程里双击exti.c文件,就可以看到该文件里面的代码,先介绍Exti_Init 函数,该函数代码如下:
  1. void Exti_Init(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitDef;
  4. EXTI_InitTypeDef EXTI_InitDef;

  5. /* 设置GPIO_Pin_12 为输入端口 */
  6. GPIO_InitDef.GPIO_Pin = GPIO_Pin_12; // 选择引脚
  7. GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN; // 设置为输入模式
  8. GPIO_Init(GPIOC, &GPIO_InitDef); // 使用GPIOC
  9. PAD_AFConfig(PAD_PC,GPIO_Pin_12,PAD_AF1);

  10. /* 设置GPIO_Pin_12 为中断端口 */
  11. EXTI_InitDef.EXTI_Line = GPIO_Pin_12; // 设置 GPIO_Pin_12 为中断源
  12. EXTI_InitDef. EXTI_Mode = EXTI_Mode_Interrupt; // 选择触发中断
  13. EXTI_InitDef.EXTI_Trigger = EXTI_Trigger_Falling; // 设置为下降沿中断
  14. EXTI_Init(PAD_PC, &EXTI_InitDef); // 使用 PAD_PC

  15. NVIC_ClearPendingIRQ(EXTI_IRQn); // 清除中断等待位
  16. NVIC_EnableIRQ(EXTI_IRQn); // 使能外部中断       
  17. }
复制代码
可以看到将PC12引脚设置成了输入模式了之后,再选择PC12作为外部中断源。最后设置NVIC。
再看外部中断的中断服务函数:
  1. void EXTI_Handler(void)
  2. {
  3. delay_soft_ms(100);
  4. if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_12) == (uint32_t)Bit_RESET)
  5. {
  6. exti_init_test();
  7. }
  8. }
复制代码
因为使用的是按键触发中断,所以加了100毫秒的软件延时来消抖,因为外部中断服务函数只有一个,所以要读取引脚判断是那个引脚触发了外部中断,最后通过串口2会发一串数据来验证按键中断是否被触发了。

6.4 下载验证
在编译成功之后,就可以下载代码到W7500EVB上,实际验证一下程序是否正确。下载代码后,在串口调试助手里面可以看到,只要按下按键,就会打印数据出来,如图6.4.1所示:
图6.4.1 W7500EVB外部中断试验结果



回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-8 01:10 , Processed in 0.028855 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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