在GD32中,MII收发中断源示例代码
时间: 2024-02-24 21:00:24 浏览: 110
GD32F405RGT6串口发送接收--中断
4星 · 用户满意度95%
以下是一个在GD32中使用MII收发中断的示例代码:
```c
#include "gd32f10x.h"
void eth_mii_isr(void)
{
/* 判断是MAC中断还是PHY中断 */
if(eth_flag_get(ETH_FLAG_WTERR)){
/* 发送错误中断 */
eth_flag_clear(ETH_FLAG_WTERR);
/* 处理发送错误中断 */
}
if(eth_flag_get(ETH_FLAG_PERR)){
/* 接收错误中断 */
eth_flag_clear(ETH_FLAG_PERR);
/* 处理接收错误中断 */
}
if(eth_flag_get(ETH_FLAG_RCOM)){
/* 接收完成中断 */
eth_flag_clear(ETH_FLAG_RCOM);
/* 处理接收完成中断 */
}
if(eth_flag_get(ETH_FLAG_TCOM)){
/* 发送完成中断 */
eth_flag_clear(ETH_FLAG_TCOM);
/* 处理发送完成中断 */
}
}
void eth_phy_isr(void)
{
/* 判断PHY中断源 */
if(eth_phy_status_get() == ETH_PHY_LINK_DOWN){
/* 处理链接状态改变中断 */
}
if(eth_phy_status_get() == ETH_PHY_AUTO_NEGOTIATION_COMPLETE){
/* 处理自动协商完成中断 */
}
}
int main(void)
{
/* 初始化以太网MAC和PHY模块 */
eth_mac_init();
eth_phy_init();
/* 配置MAC中断 */
nvic_irq_enable(ETH_IRQn, 0, 0);
eth_interrupt_enable(ETH_INT_FLAG_WTERR | ETH_INT_FLAG_PERR | ETH_INT_FLAG_RCOM | ETH_INT_FLAG_TCOM);
/* 配置PHY中断 */
nvic_irq_enable(ETH_PHY_IRQn, 0, 0);
eth_phy_interrupt_enable(ETH_PHY_INT_FLAG_LINK_DOWN | ETH_PHY_INT_FLAG_AUTO_NEGOTIATION_COMPLETE);
while(1){
/* 主程序 */
}
}
```
在此代码中,我们首先初始化了以太网MAC和PHY模块,并配置了MAC中断和PHY中断。在中断服务程序中,我们判断中断源,并执行相应的处理代码。最后,在主程序中我们只需要执行我们的主要任务,中断服务程序会在需要时自动执行。
阅读全文