-
ack,nack,ack应答信号,发送反馈低电平到数据线上(此时数据线是高电平,假如有ack,SDA会被拉低),nack就是非应答,没有应答,数据线一直为高。原则是:谁接收,谁应答,发送器发送完LSB 之后,应当释放SDA 线(拉高SDA,输出晶体管截止),不能将其拉低,以等待接收器产生应答位。
对比你的代码,你的代码同楼主位的IIC的区别:
void i2_stop(void)
{
SDA=0;i2_delay();SCL=1;i2_delay();
SDA=1;i2_delay(); //人家的再将SCL拉低,可能是方便下次的使用,不过这个问题不大,看人习惯。
}
void i2_init(void)
{SCL=1;i2_delay(); SDA=1;i2_delay(); }//初始化问题也不大,不要乱跳变电平就可以了。本来IIC就不用怎么去初始化的。所以,这个可以省的。
void i2_start(void)
{
SDA=1;i2_delay();SCL=1;i2_delay();SDA=0;i2_delay(); //你这个的是有错误的。因为你的SCL没有变低。虽然你在SCL高电平的时候,将SDA跳为低,实现了IIC的start,但是,假设你下次传输数据的时候,你的SCL还是配置为高,那么,这个时候你就缺了一个时钟,发送会混乱的。当然我说的是假设。所以,为了通用性着想,你应该将SCL拉低,在结束函数前。
}
-
看贴子,跟跟贴,是我的美德,呵呵
-
添加SYSGEN_BTH(Bluetooth Stack with Universal Loadable Driver),
重新编译系统。
-
UP 5楼!
个人觉得,真做驱动的话没必要一步步慢慢往下走。
如果有机会,那就硬着头皮做一次最底层的、驱动裸芯片,驱动一下串口或I2C、再枚举配置一下PCI/PCIE。
否则硬件对软件人员而言总是很神秘的。
-
ai,我也在调。发现更本不该学Verilog,都在按C的想法去编程,后果可想而知。愁人啊
-
是在WINCE上。不是在PC上。请各位注意。
-
C#?主要要看设备的OS中是否已经集成了.net的东东
如果没有,可能实用起来有困难。
-
引用 5 楼 codewarrior 的回复:
驱动怎么能就提高速度了?典型的对驱动盲目崇拜。你的问题瓶颈在算法,我建议你直接使用SQLCE,效率很高。
呵呵,支持,在WinCE5.0中驱动和应用仅仅是最终的表现形式不一样。
你额外加一层驱动访问,还不如在应用程序中直接操作效率高。
-
引用 9 楼 wlc311 的回复:
.net应该是非PQOAL结构,看起来结构不够清楚,与三星的SMDK2440相比,我还是觉得PQOAL好点,也许费点时间,从长远看,还是值得的.
你说的是从目录结构看的,
那会不会影响OS性能呢?
-
寄存器设置不对吧
-
过滤驱动一样可以发送URB包,通过IRP下发。
用IoBuildDeviceIoControlRequest新建一个IRP,UsbBuildGetDescriptorRequest新建一个Urb,通过IoCallDriver把这个IRP发送下去就可以了
-
不懂,加载驱动会弹出窗口?
不知道有这个功能,还是问问原产厂家吧。
-
Source Insight足够了,而且足够好用。
-
1.是的,你的理解是正确的。
2.不是。时钟周期是指cpu流水线运行的基数,比如单指令周期cpu就是一个时钟周期运行一条指令。
而一个tick可以是N个时钟周期,这个N是可变的,比如SYS_CLK_RATE可以改成1200,2000,这是为了满足操作系统运行而人为指定的。
-
用当然都是可以用的哦,不过这些都是民用模块,可能有些功能被阉割了。
-
顶
-
反汇编filesys.exe看看出错的那个地址是什么函数……
-
各位高手:怎么解决啊?
-
p1口是准双向口,p1口的每一位口线能独立地作输入线或输出线。
作输出时:将“1”写入锁存器,是输出极的场效应管截止,输出线有内部上拉电阻提升为高点位,输出“1”
作输入时:必须先将“1”写入锁存器,场效应管截止。该口线由内部上拉电阻提拉成高电平,同时也能被外部输入源拉成低电平,既当外部输入“1”时该口线为高电平,而出入0时,该口为低电平。
-
#include
void main()
{
int led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int i;
P3=0xfe;
for(; ; )
{
P1=led;
i++;
if(i == 10)
i=0;
}
}