最近在arm11上整乙個東西,用串列埠藍芽模組,接到主機板上,通過向藍芽傳送at命令,讀取反饋資訊。
1.暫不帶作業系統,我已經加入ramdisk檔案系統。
2.在檔案系統裡執行linux應用程式。
這裡是串列埠操作測試程式,與下列的驅動同步:
#include
#include
#include //open(), read(), write()
#define bufsize 100
int main(int argc, char* argv)
ret = write(fd, msg, strlen(msg));
//printf("envi 1\n");
if(ret < 0)
//printf("envi 2\n");
while(1)
//printf("envi 4\n");
if(buf[0] != '\0')
} return 0;
}3.我自己也寫了個串列埠驅動。uart3口接藍芽。**如下:
#if 1
#include
#include
#include
#include
#include //copy_to_use, copy_from_user
#include
#include
#include //readl, readb, writel, writeb
#define bufsize 100
#define ttys3_major 240
#define elfin_uart_base 0xec800000
#define elfin_uart3_offset 0x0c00
#define iobase (elfin_uart_base + elfin_uart3_offset)
#define uart_ulcon3 iobase
#define uart_ucon3 (iobase + 0x4)
#define uart_ufcon3 (iobase + 0x8)
#define uart_umcon3 (iobase + 0x0c)
#define uart_utrstat3 (iobase + 0x10)
#define uart_ufstat3 (iobase + 0x18)
#define uart_utxh3 (iobase + 0x20)
#define uart_urxh3 (iobase + 0x24)
#define uart_ubrdiv3 (iobase + 0x28)
#define uart_udivslot3 (iobase + 0x2c)
#define uart_uintp3 (iobase + 0x30)
#define uart_uintsp3 (iobase + 0x34)
#define uart_uintm3 (iobase + 0x38)
#if 0
#define ulcon_offset 0x00
#define ucon_offset 0x04
#define ufcon_offset 0x08
#define umcon_offset 0x0c
#define utrstat_offset 0x10
#define uerstat_offset 0x14
#define ufstat_offset 0x18
#define umstat_offset 0x1c
#define utxh_offset 0x20
#define urxh_offset 0x24
#define ubrdiv_offset 0x28
#define udivslot_offset 0x2c
#define uintp_offset 0x30
#define uintsp_offset 0x34
#define uintm_offset 0x38
#endif
/*void writel(char value,long reg)
char read(long reg) (
return *(volatile unsigned char *)(elfin_uart_console_base3 + utxh_offset);
}*/int envi_open(struct inode *inode, struct file *filp)
ssize_t envi_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos)
; int state;
int i = 0,temp;
copy_from_user(wbuf, buf, count);
while(wbuf[i] != '\0')
} for(temp = 0; temp < 600000 ; temp++)
else
break;
if(temp == 600000)
}return 0;
} //export_symbol_gpl(uart3_write);
ssize_t envi_read(struct file *filp, char __user *buf, size_t count, loff_t *f_ops)
; int state;
state = readl(uart_utrstat3);
if((0x01 & state) == 1)
else
return 0; */
//envi rewrite
char rbuf[64]=;
int ufstat_reg,i;
char fifocount, ufstat3, rxdataready,rxchar,uintpreg,uintmreg;
ufstat_reg = readl(uart_ufstat3);
fifocount = ufstat_reg & 0x3f;
ufstat3 = (ufstat_reg & (1<<6))&0xff;
if(ufstat3 || fifocount > 0)
rxdataready = 1;
else
rxdataready = 0;
while(rxdataready)
copy_to_user(buf, rbuf, i);
printk("i:%d\n",i);
writel((readl(uart_uintsp3)|0x01),uart_uintsp3);
uintpreg = readb(uart_uintp3);
uintmreg = readb(uart_uintm3);
if((uintpreg & 0x01)||(uintpreg & 0x02))
else
uintmreg &= ~0x01;
return 0;
} //export_symbol_gpl(uart3_read);
int envi_release(struct inode *inode, struct file *filp)
struct file_operations ttys3_fops =
; static __init int envi_init(void)
return 0;
} static __exit void envi_exit(void)
module_init(envi_init);
module_exit(envi_exit);
module_author("envi");
module_description("s5p6450 serial driver");
module_license("gpl");
#endif
有問題:
modprobe used greatest stack depth: 5608 bytes left
各位大蝦,有什麼好的建議嗎?困惑ing.
linux下串列埠檢視命令
1 檢視串列埠是否可用 可以對串列埠傳送資料比如對com1口,echo dev ttys0 2 檢視串列埠名稱使用 ls l dev ttys 一般情況下串列埠的名稱全部在dev下面,如果你沒有外插串列埠卡的話預設是dev下的ttys 一般ttys0對應com1,ttys1對應com2,當然也不一定...
「串列埠命令字解析」測試
實驗平台 stm32f103開發板 串列埠例程參考 戰艦例程 目錄前言 測試過程 程式設計 測試 注意事項 測試結果 總結 串列埠命令字解析,多用於裝置測試。由生產裝備 測試裝置 傳送命令資料幀給被測裝置,被測裝置接收命令資料幀並返回相應的引數。通過這些引數,我們可以得知被測裝置是否有故障,也可獲得...
linux串列埠命令列除錯
測試傳送 echo 123456 dev ttys1 測試接收 busybox microcom s 115200 dev ttys1 引數 s 波特率 t 超時退出時間 不加 t就是一直等待接收 例如 1.將arm機器的串列埠1接電腦 電腦開個串列埠工具設定波特率115200 2.busybox ...