2013年5月30日 星期四

ENC28J60+UIP1.0 TCI/IP Stack 接收 UDP 廣播封包

要讓 ENC28J60+UIP1.0 TCI/IP Stack 接收 UDP 廣播封包的方式…

一、UIP 修改 configure 檔 uip-conf.h
    #define UIP_CONF_BROADCAST            1

二、ENC28J60 的部份在設定 FILTER 時要禁用 FILTER。

不接收廣播訊息要設定如下,找到設置 FILTER 的程式碼,mark 掉才能聽廣播…

    //接收過濾器
    //UCEN:單播過濾器使能位
    //當ANDOR = 1 時:
    //1 = 目標地址與本地MAC 地址不匹配的數據包將被丟棄
    //0 = 禁止過濾器
    //當ANDOR = 0 時:
    //1 = 目標地址與本地MAC 地址匹配的數據包會被接受
    //0 = 禁止過濾器

    //CRCEN:後過濾器CRC 校驗使能位
    //1 = 所有CRC 無效的數據包都將被丟棄
    //0 = 不考慮CRC 是否有效
   
    //PMEN:格式匹配過濾器使能位
    //當ANDOR = 1 時:
    //1 = 數據包必須符合格式匹配條件,否則將被丟棄
    //0 = 禁止過濾器
    //當ANDOR = 0 時:
    //1 = 符合格式匹配條件的數據包將被接受
    //0 = 禁止過濾器
    enc28j60Write(ERXFCON, ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN);
    enc28j60Write(EPMM0, 0x3f);
    enc28j60Write(EPMM1, 0x30);
    enc28j60Write(EPMCSL, 0xf9);
    enc28j60Write(EPMCSH, 0xf7);


三、UIP 建立 Connection…
    uip_ipaddr_t ipaddr;  
    struct uip_udp_conn * conn;
   
    uip_ipaddr( ipaddr, 0, 0,0, 0 );
    conn = uip_udp_new( &ipaddr, HTONS( 0 ) );
    if( conn != NULL )
            uip_udp_bind( conn, HTONS( MY_UDP_PORT ) );

沒有留言:

更高效處理 micro second 的方式

更高效處理 micro second 的方式…  以 STM32 為例… __IO unsigned long sys_tick = 0; void SysTick_Handler(void) {     HAL_IncTick();     sys_tick += (SysTi...