我是刚接触M3不久,我们公司参照LM3S的参考设计图做了产品设计,在PCB做好之后,启用ethernet外设和ethernet controller,但是发现25M的晶振不起振,phy不能和电脑建立连接。晶振外设很简单,就两个18pf电容和25M cristal,软件上也启用了ethernet,现在真是不知道什么问题,希望各位专家能给予支持,万分感谢!
您好:
其他程序是可以烧进去的,串口打印消息,控制IO口都是可以的。我们一共先焊接了两块板,两块都是25M晶振用示波器测试都没有起来,也检查过虚焊这些问题的都没有。
#include <stdio.h>
#include <LM3Sxxxx.H> // LM3Sxxxx library definitions
int main(void)
{
unsigned char macaddr[6];
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3);
EthernetInitExpClk(ETH_BASE, SysCtlClockGet());
EthernetIntDisable(ETH_BASE, (ETH_INT_PHY | ETH_INT_MDIO | ETH_INT_RXER |
ETH_INT_RXOF | ETH_INT_TX | ETH_INT_TXER | ETH_INT_RX));
EthernetConfigSet(ETH_BASE, (ETH_CFG_TX_DPLXEN | ETH_CFG_TX_CRCEN | ETH_CFG_TX_PADEN));
//
// Enable the Ethernet Controller.
//
macaddr[0]=0x12;
macaddr[1]=0x23;
macaddr[2]=0x45;
macaddr[3]=0x67;
macaddr[4]=0x89;
macaddr[5]=0xab;
EthernetMACAddrSet(ETH_BASE, macaddr);
EthernetEnable(ETH_BASE);
// SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
// GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
// GPIODirModeSet (GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_DIR_MODE_OUT);
/* Configure push buttons as inputs */
//GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
// GPIODirModeSet (GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_DIR_MODE_IN);
return 0;
}
这是我写的ethernet启用的程序,麻烦帮我看看对不对,谢谢
您好:
其他程序是可以烧进去的,串口打印消息,控制IO口都是可以的。我们一共先焊接了两块板,两块都是25M晶振用示波器测试都没有起来,也检查过虚焊这些问题的都没有。
#include <stdio.h>
#include <LM3Sxxxx.H> // LM3Sxxxx library definitions
int main(void)
{
unsigned char macaddr[6];
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3);
EthernetInitExpClk(ETH_BASE, SysCtlClockGet());
EthernetIntDisable(ETH_BASE, (ETH_INT_PHY | ETH_INT_MDIO | ETH_INT_RXER |
ETH_INT_RXOF | ETH_INT_TX | ETH_INT_TXER | ETH_INT_RX));
EthernetConfigSet(ETH_BASE, (ETH_CFG_TX_DPLXEN | ETH_CFG_TX_CRCEN | ETH_CFG_TX_PADEN));
//
// Enable the Ethernet Controller.
//
macaddr[0]=0x12;
macaddr[1]=0x23;
macaddr[2]=0x45;
macaddr[3]=0x67;
macaddr[4]=0x89;
macaddr[5]=0xab;
EthernetMACAddrSet(ETH_BASE, macaddr);
EthernetEnable(ETH_BASE);
// SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
// GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
// GPIODirModeSet (GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_DIR_MODE_OUT);
/* Configure push buttons as inputs */
//GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
// GPIODirModeSet (GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_DIR_MODE_IN);
return 0;
}
这是我写的ethernet启用的程序,麻烦帮我看看对不对,谢谢
Dean您好,
建议您参考EKK-lm3s8962的以太网的例程enei_lwip来测试,两个片子是一个系列的,同时以太网部分的引脚是一样的。链接如下:
你有设置MAC地址,IP地址没?在TI的官方程序enet_lwip里的面使用DHCP来分配IP,而且要判断MAC的,如果没有设置MAC的话LWIP是不运行的。所以要测试的话,你需要先设置合法的MAC和使用固定IP。这样就能准确判定了。
//
// Enable and Reset the Ethernet Controller.
//
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);
这两句ETH应该就可以了,使用的话还需开中断,你如果配置了LED的话,接上网线后,LED应该会亮的。
应该是硬件的问题,即使芯片是空的25M也应该有时钟!
硬件上几个地方先改改吧:
1> TXCT/RXTC接3.3的磁珠去掉
2> C223,C224,C225,C226改成10pf的