congcongy
驱动牛犊
驱动牛犊
  • 注册日期2003-07-05
  • 最后登录2006-10-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:982回复:4

有关固件编程问题

楼主#
更多 发布于:2003-08-15 10:16
1.如下函数:
unsigned char inportb(unsigned int Addr)
{
  return*((unsigned char xdata*) Addr);
}
此函数在很多读取数据的地方被调用,但是我看了几个例子,在调用之前都好象没有对D12进行芯片选通和读信号选通,这是怎么回事啊!
2:如下函数:
void fn_usb_isr()
{
  unsigned int i_st;
  bEPPflags.bits.in_isr = 1;
  i_st = D12_ReadInterruptRegister();//读取中断寄存器
   if(i_st != 0) {
      if(i_st & D12_INT_ENDP0IN)
ep0_txdone();}//端点0 IN中断
(头文件中定义了D12_INT_ENDP0IN为0x02!)
这个函数是哪种解释啊:(1)当中断寄存器中的值为02时执行端点0 IN中断;(2)当中断寄存器中的第1位为1时执行端点0 IN中断。
中断寄存器中的值是由主机决定啊 还是由MCU决定呢?
(问题可能比较低级,但对初学的我还是比较迷惑,还请各位大侠帮帮忙)




      

最新喜欢:

lhaihlhaih
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-15 12:09
1,你怎么知道没有选通呢?其中那个参数Addr就是你要读数据的地址,而函数里返回的是这个地址里的值,你在看看指针的用法吧。
2,不明白你的意思,在中断寄存器中,02就是代表ep0tx中断,如果你读中断寄存器发先是这个值,说明就有这个中断,这有什么好疑惑的?中断寄存器中的值是由主机决定的,你别的不用管,只需要读这个中断寄存器判断是什么值然后做出相应的响应就可以了。
usb_anywhere
驱动小牛
驱动小牛
  • 注册日期2003-07-29
  • 最后登录2005-11-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-15 13:46
D12的中断寄存器由两个字节组成,其中字节1的各位均有实际用处
;字节2只有第一位有用,其它位为保留位。
d12中定义的标准为:
#define D12_ENDP0OUT 0
#define D12_ENDP0IN 1
#define D12_ENDP1OUT 2
#define D12_ENDP1IN 3
#define D12_ENDP2OUT 4
#define D12_ENDP2IN 5
分别表示3个端点,6个端点号
运算之后得到的结果说明是哪一个端点号响应了,当然isr得到的值对应上面的值
”中断寄存器中的值是由主机决定啊 还是由MCU决定呢?“这个问题太没有水准了,起码的概念都不懂。自己好好到前面帖子看看吧。

驱网是你们的,也是我们的,归根结底还是大家的!
congcongy
驱动牛犊
驱动牛犊
  • 注册日期2003-07-05
  • 最后登录2006-10-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-15 15:15
不好意思,让两位见笑了!
我明白了,为表感谢每人给一点分,谢谢!!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-16 18:50
这有什么,刚开始总会有些不明白的,我光做固件就做了1个多月,当然那时候主要是没有硬件,先写的固件,再说philips的固件写的太乱,我用cypress的几天就搞定了。
游客

返回顶部