2463|2

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

各位高手啊,帮帮忙啊 [复制链接]

最近在学嵌入式,学习USB的代码中有些问题不知道什么意思?
其中“*paddr = (unsigned char *)(addr - 4);”
原文void Usb_Get_Data(unsigned int addr)
{
        unsigned short i_st;
        unsigned char *paddr = (unsigned char *)(addr - 4);
        int            length = 0x100000;
        int            bGetlen = 0;
       
        rNCACHBE0=0x80002000;//设置非CACHE的开始地址0x2000000,结束地址0x8000000

        Uart_Printf("Download file from usb......\n");
        reconnect_USB();
       
        while(1)
        {
                i_st = D12_ReadInterruptRegister();//D12_ReadInterruptRegister();
               
                if(i_st != 0)
                {
                        if(i_st & D12_INT_BUSRESET)
                        {
                                bus_reset();
                                bEPPflags.bits.bus_reset = 1;
                               
                                i_st &= ~D12_INT_BUSRESET;
                        }
                        else
                        {
                                if(i_st & D12_INT_EOT)
                                {
                                        dma_eot();
                                        i_st &= ~D12_INT_EOT;
                                }
       
                                if(i_st & D12_INT_SUSPENDCHANGE)
                                {
                                        bEPPflags.bits.suspend = 1;
                                        i_st &= ~D12_INT_SUSPENDCHANGE;
                                }
       
                                if(i_st & D12_INT_ENDP0IN)
                                {
                                        ep0_txdone();
                                        i_st &= ~D12_INT_ENDP0IN;
                                }
                                if(i_st & D12_INT_ENDP0OUT)
                                {
                                        ep0_rxdone();
                                        i_st = ~D12_INT_ENDP0OUT;
                                }
                                if(i_st & D12_INT_ENDP1IN)
                                {
                                        ep1_txdone();
                                        i_st &= ~D12_INT_ENDP1IN;
                                }
                                if(i_st & D12_INT_ENDP1OUT)
                                {
                                        {
                                                unsigned char i;
                                                unsigned char len;
                                               
                                                D12_ReadLastTransactionStatus(2);                /* Clear interrupt flag */
                                               
                                                len = D12_ReadEndpoint(2, GenEpBuf, sizeof(GenEpBuf));
                                                if(len != 0)
                                                {
                                                        memcpy(paddr, GenEpBuf, len);
                                                        paddr += len;
                                                        if(bGetlen == 0 && (int)paddr >= (int)addr)
                                                        {
                                                                length = *((unsigned int *)(addr-4));
                                                                Uart_Printf("\r\nDownloading, size = %d(0x%x)... \r\n", length, length);
                                                                bGetlen = 1;
                                                        }
                                                        if((int)paddr >= (int)addr + length)
                                                        {
                                                                Uart_Printf("Download complete\r\n");
                                                                return;
                                                        }
                                                        Uart_Printf("\rpaddr = 0x%08x, addr = 0x%08x", paddr, addr);
                                                        bEPPflags.bits.ep1_rxdone = 1;
                                                }
                                        }
                                        i_st &= ~D12_INT_ENDP1OUT;
                                }
                                if(i_st & D12_INT_ENDP2IN)
                                {
                                        main_txdone();
                                        i_st &= ~D12_INT_ENDP2IN;
                                }
                                if(i_st & D12_INT_ENDP2OUT)
                                {
                                        main_rxdone();
                                        i_st &= ~D12_INT_ENDP2OUT;
                                }
                               
                                if(bEPPflags.bits.ep1_rxdone)
                                {
                                       
                                }
                               
                                if (bEPPflags.bits.bus_reset) {
                                        DISABLE;
                                        bEPPflags.bits.bus_reset = 0;
                                        ENABLE;
                                } // if bus reset
               
                                if (bEPPflags.bits.suspend) {
                                        DISABLE;
                                        bEPPflags.bits.suspend= 0;
                                        ENABLE;
                                        suspend_change();
                                } // if suspend change
               
                                if (bEPPflags.bits.setup_packet){
                                        DISABLE;
                                        bEPPflags.bits.setup_packet = 0;
                                        ENABLE;
                                        control_handler();
                                } // if setup_packet
               
                                if(bEPPflags.bits.setup_dma) {
                                        DISABLE;
                                        bEPPflags.bits.setup_dma = 0;
                                        ENABLE;
                                        //setup_dma();
                                } // if setup_dma
                        }
                }
        }
}

最新回复

好的好的,是啊,基础太差了,谢谢了  详情 回复 发表于 2009-7-29 20:01
点赞 关注

回复
举报

87

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
unsigned char *paddr = (unsigned char *)(addr - 4);

这是C的基本语法,定义了一个指针变量paddr,这个指针变量指向unsigned char类型的数据。然后给它赋值为addr-4,(unsigned char *)是做了一个强制类型转换,使等号2端是同一类型。。。。。。

还是要把基础打好呀。。。
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
好的好的,是啊,基础太差了,谢谢了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表