I2c能否通过mmap读写
现在要做一个I2C的键盘的控制程序,我想直接在用户态写比较简单.
- C/C++ code
#define I2C0_REG_BASE (0x01C22000)m_nFd = open("/dev/mem", O_RDWR); m_pBaseAddr = (i2c_regs_t *)mmap(0, sizeof(i2c_regs_t), PROT_READ | PROT_WRITE, MAP_SHARED, m_nFd, (0x00000000+I2C0_REG_BASE ) >>0 );在I2C 的读写函数中,总是死在红色的位置 // transmit data one byte at a time. for (i = 0; i < in_length; i++) { i2c->ICDXR = src_buffer[i]; // wait for data to be copied to shift register. cnt = 0; do { if (cnt++ > I2C_TIMEOUT) { // timed out waiting for data...reinit and return error. //I2C_init(i2c, g_clock_rate); // return (ERR_TIMEOUT); } } [color=#FF0000]while (!CHKBIT(i2c->ICSTR, ICXRDY));[/color] }
我的内核是2.6.33.rc4 板子OMAPL138, arm-926ejs+DSP, DDR内存起始区域 0xc0000000. 键盘控制芯片TCA8418
这种方法可不可以,
如果可以0x00000000 是不是要换成0xc000000(也不行)
还有我看有人说显存的例子,offset写a00000, 我把地址>>12 或>>8也不行.
[解决办法]
都不支持你的设备,你有什么办法,你只能自己添加进去了。
[解决办法]
不过你竟然用了内存映射,就不应该在使用read()和write()来读写数据了.