CH579自己初始化網(wǎng)絡,死活不行

CH579芯片,因為只是使用簡單的網(wǎng)絡傳輸,不想用官方的LIB庫,只需要抓取ETH貞數(shù)據(jù),自己寫網(wǎng)絡協(xié)議。

但初始化網(wǎng)絡一直不成功,進不了中斷,望提供協(xié)助。

如果有官方例子,麻煩發(fā)一份: 個人信息保護,已隱藏


以下是我的測試代碼


#include "CH57x_common.h"


__align(4) UINT8 eth_dma_tx_buf[1500];

__align(4) UINT8 eth_dma_rx_buf[1500];


void ch579_eth_init(uint8_t *mac_addr)

{

? ? printf("init eth\n");


? ? //進入安全訪問模式

? ? R8_SAFE_ACCESS_SIG = 0x57;

? ? R8_SAFE_ACCESS_SIG = 0xA8;

? ?

? ? //打開以太網(wǎng)時鐘

? ? R8_SLP_CLK_OFF1 &= (~RB_SLP_CLK_ETH);

? ?

? ? //打開以太網(wǎng)電源

? ? R8_SLP_POWER_CTRL &= (~RB_SLP_ETH_PWR_DN);

? ?

? ? //退出安全訪問模式

? ? R8_SAFE_ACCESS_SIG = 0x00;


? ? //使能ETH管腳?

? ? R16_PIN_ANALOG_IE |= RB_PIN_ETH_IE;


? ? //中斷使能寄存器,該開的都開吧

? ? R8_ETH_EIE = RB_ETH_EIE_INTIE | RB_ETH_EIE_RXIE | RB_ETH_EIE_LINKIE \

? ? ? ? | RB_ETH_EIE_TXIE | RB_ETH_EIE_R_EN50 | RB_ETH_EIE_TXERIE | RB_ETH_EIE_RXERIE;

? ?

? ? R8_ETH_EIR = 0xFF; ?//清除中斷標志

? ? R8_ETH_ESTAT = RB_ETH_ESTAT_INT | RB_ETH_ESTAT_BUFER;//清除狀態(tài)


? ? //收發(fā)模塊復位

? ? R8_ETH_ECON1 |= RB_ETH_ECON1_TXRST | RB_ETH_ECON1_RXRST;

? ? R8_ETH_ECON1 &= ~(RB_ETH_ECON1_TXRST | RB_ETH_ECON1_RXRST);


? ? R32_ETH_MACON = 0;

? ? R8_ETH_MACON1 |= RB_ETH_MACON1_MARXEN;//MAC接收使能

? ? R8_ETH_MACON2 &= 0x1F;

? ? R8_ETH_MACON2 |= 0x20;

? ? R8_ETH_MACON2 |= RB_ETH_MACON2_TXCRCEN;//硬件填充CRC

? ? R8_ETH_MACON2 &= ~RB_ETH_MACON2_HFRMEN;//不接收巨型幀

? ? R8_ETH_MACON2 |= RB_ETH_MACON2_FULDPX;//全雙工


? ? R16_ETH_MAMXFL = 1500; //MTU=1500=0x05DC 最大包長


? ? //MAC 注意字節(jié)順序

? ? R16_ETH_MAADRH = macaddr[0] << 8 | macaddr[1];

? ? R32_ETH_MAADRL = macaddr[2] << 24 | macaddr[3] << 16 | macaddr[4] << 8 | macaddr[5];


? ? //DMA buffers

? ? R16_ETH_ETXST = (uint32_t)eth_dma_tx_buf;

? ? R16_ETH_ERXST = (uint32_t)eth_dma_rx_buf;

? ? ? ?

? ? //使能接收

? ? R8_ETH_ECON1 |= RB_ETH_ECON1_RXEN;//接收使能

? ?

? ? //開啟中斷

? ? NVIC_EnableIRQ(ETH_IRQn);

? ? ? ?

? ? printf("init eth end!\n");

}

//------------------------------------------------------------

void ETH_IRQHandler(void) // 以太網(wǎng)中斷?

{

? ? printf("I");


? ? //接收到數(shù)據(jù)包

? ? if ((R8_ETH_EIR & RB_ETH_EIR_RXIF) != 0)

? ? {

? ? ? ? printf("Get data\n");

? ? ? ? R8_ETH_EIR |= RB_ETH_EIR_RXIF; //寫1 清除中斷

? ? }

? ? ??

? ? //接收錯誤

? ? if ((R8_ETH_EIR & RB_ETH_EIE_RXERIE) != 0)

? ? {

? ? ? ? printf("Get error\n");

? ? ? ? R8_ETH_EIR |= RB_ETH_EIE_RXERIE; //清除中斷

? ? }


? ? //發(fā)送完成

? ? if ((R8_ETH_EIR & RB_ETH_EIR_TXIF) != 0)

? ? {

? ? ? ? printf("send\n");

? ? ? ? R8_ETH_EIR |= RB_ETH_EIR_TXIF; //清除中斷

? ? }


? ? //發(fā)送錯誤

? ? if ((R8_ETH_EIR & RB_ETH_EIE_TXERIE) != 0)

? ? {

? ? ? ? printf("send error\n");

? ? ? ? R8_ETH_EIR |= RB_ETH_EIE_TXERIE; //清除中斷

? ? }


? ? //Link 變化標志

? ? if ((R8_ETH_EIR & RB_ETH_EIR_LINKIF) != 0)

? ? {

? ? ? ? printf("link..\n");

? ? ? ? R8_ETH_EIR |= RB_ETH_EIR_LINKIF; //清除中斷

? ? }

? ? ? ?

}

//-----------------------------------------------------------

int main()

{

? ? //--LAN LED燈使用-------

? ? GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); //LAN_CONN_LED

? ? GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA); //LAN_DATA_LED

? ? GPIOB_ResetBits(GPIO_Pin_4);

? ? GPIOB_ResetBits(GPIO_Pin_7); ? ?

? ? //-----------------------------------------

? ?

? ? //--UART1:printf -------------------------

? ? GPIOA_SetBits(GPIO_Pin_9); ?//PA9=TX1 = printf

? ? GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); ?//PA8=RX1, ?RXD-配置上拉輸入

? ? GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽輸出,注意先讓IO口輸出高電平

? ? UART1_DefInit();

? ? //-----------------------------------------



? ? UINT8 mac_addr[] = { 0x00, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };

? ? ch579_eth_init(mac_addr);


? ? while(1)

? ? {

? ? ? ? mDelaymS( 100 ); ? ?//100ms

? ? ? ? GPIOB_InverseBits(GPIO_Pin_0); ?//LED翻轉(zhuǎn) 測試

? ? };

}



熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

CH579DS P93頁:

1.初始化?

(1) 、配置安全寄存器進入安全模式,打開以太網(wǎng)絡的時鐘和電源;? ? <-已做

(2) 、開啟相應的中斷,可選的,啟用阻抗匹配電阻;? ? ? ? ? ? ? ? ? ? ? ? <-已做

(3) 、配置CRC功能、MAC地址;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<-已做

(4) 、設置緩存;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<-已做

(5) 、啟動接收,開啟中斷。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <-已做


難道是我打開的姿勢不對,該做的都做了,來個FAE協(xié)助一下


另0x40009018/R32_ETH_MACON 是什么東東,DS里面沒有介紹,默認 或=0 都不行



求人不如求己,搞定

phy設置一下,官方庫的案例初始化后打印出來

eth REG:

R8_ETH_EIE=0xDF

R8_ETH_EIR=0x00

R8_ETH_ESTAT=0x00

R8_ETH_ECON2=0x06

R8_ETH_ECON1=0x00

R32_ETH_MACON=0x10300100

R8_ETH_MACON1=0x01

R8_ETH_MACON2=0x30

R8_ETH_MABBIPG=0x10

R32_ETH_TIM=0x6000102

R16_ETH_EPAUS=0x0102

R16_ETH_MAMXFL=1536



只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频