|
我用stm32vet6+dm9000+uip1.0,
一。硬件连接:fmsc_a16接cmd, fsmc_ne1接cs,
二,地址设置:
#define NET_BASE_ADDR 0x60000000#define NET_REG_ADDR (*((volatile uint16_t *) NET_BASE_ADDR))#define NET_REG_DATA (*((volatile uint16_t *) (NET_BASE_ADDR + 0x00020000)))
三FSMC设置
*/
static void DM9K_FSMCConfig(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure;
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 1 ----------------------------------------*/
/* FSMC_Bank1_NORSRAM4 configuration */
FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 4;
FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 4;
FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 4;
FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 4;
FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 4;
FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 4;
FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructure;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/* - BANK 1 (of NOR/SRAM Bank 0~3) is enabled */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
四。读取ID函数
uint32_t dm9k_ReadID(void)
{
uint8_t vid1,vid2,pid1,pid2;
if (s_FSMC_Init_Ok == 0)
{
DM9K_CtrlLinesConfig();
DM9K_FSMCConfig();
s_FSMC_Init_Ok = 1;
}
vid1 = ior(DM9000_REG_VID_L) & 0xFF;
vid2 = ior(DM9000_REG_VID_H) & 0xFF;
pid1 = ior(DM9000_REG_PID_L) & 0xFF;
pid2 = ior(DM9000_REG_PID_H) & 0xFF;
return (vid2 << 24) | (vid1 << 16) | (pid2 << 8) | pid1;
}
* 函数名: ior
* 参 数: reg :寄存器地址
* 返 回: 无
* 功 能: 读出寄存器的值
*/
uint8_t ior(uint8_t reg)
{
NET_REG_ADDR = reg;
return (NET_REG_DATA);
}
五,debug出错地点 ior函数,return时出错
报错图片 |
-
ior函数return时出错
|