📄 serial_driver.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head> <title></title> <link rel="stylesheet" media="screen" type="text/css" href="./style.css" /> <link rel="stylesheet" media="screen" type="text/css" href="./design.css" /> <link rel="stylesheet" media="print" type="text/css" href="./print.css" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><a href=start.html>start</a></br><h1><a name="blackfin_serial_driver" id="blackfin_serial_driver">Blackfin Serial Driver</a></h1><div class="level1"><p> The serial driver for the Blackfin works like any other serial driver for Linux, and can be controlled with the termio, as defined, in the <a href="http://www.opengroup.org/pubs/online/7908799/xsh/termios.h.html" class="urlextern" title="http://www.opengroup.org/pubs/online/7908799/xsh/termios.h.html" rel="nofollow">termios.h</a> man page.</p><p>For detailed information, check out the <a href="http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/intro.html" class="urlextern" title="http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/intro.html" rel="nofollow">Serial Programming HOWTO</a> or the <a href="http://www.easysw.com/~mike/serial/" class="urlextern" title="http://www.easysw.com/~mike/serial/" rel="nofollow">Serial Programming Guide for POSIX Operating Systems</a>.</p><p>This code example runs, and was borrowed from <a href="http://docs.linux.cz/programming/c/unix_examples/termstuff.html" class="urlextern" title="http://docs.linux.cz/programming/c/unix_examples/termstuff.html" rel="nofollow">http://docs.linux.cz/programming/c/unix_examples/termstuff.html</a>, and show be able to provide a basic info on how to use/control the serial port.</p><pre class="code c"><span class="coMULTI">/* termstuff.c - omnibus demo of various terminal operations. */</span><span class="co2">#include <stdio.h></span><span class="co2">#include <termios.h></span><span class="co2">#include <unistd.h></span><span class="co2">#include <stdlib.h></span> <span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span> <span class="kw4">struct</span> termios oldmodes, newmodes; tcflag_t iflag<span class="br0">[</span><span class="br0">]</span> = <span class="br0">{</span> ICRNL, ISTRIP, BRKINT, IGNPAR, IMAXBEL, IXANY, <span class="nu0">0</span> <span class="br0">}</span>; <span class="kw4">char</span> * iflagname<span class="br0">[</span><span class="br0">]</span> = <span class="br0">{</span><span class="st0">"ICRNL"</span>, <span class="st0">"ISTRIP"</span>, <span class="st0">"BRKINT"</span>, <span class="st0">"IGNPAR"</span>, <span class="st0">"IMAXBEL"</span>, <span class="st0">"IXANY"</span> , <span class="br0">(</span><span class="kw4">char</span> *<span class="br0">)</span> <span class="nu0">0</span><span class="br0">}</span>; <span class="kw4">char</span> buf<span class="br0">[</span><span class="nu0">81</span><span class="br0">]</span>; <span class="kw4">int</span> i; tcflag_t oflag<span class="br0">[</span><span class="br0">]</span> = <span class="br0">{</span> OCRNL, OLCUC, ONLCR, <span class="nu0">0</span> <span class="br0">}</span>; <span class="kw4">char</span> * oflagname<span class="br0">[</span><span class="br0">]</span> = <span class="br0">{</span><span class="st0">"OCRNL"</span>, <span class="st0">"OLCUC"</span>, <span class="st0">"ONLCR"</span>, <span class="br0">(</span><span class="kw4">char</span> *<span class="br0">)</span> <span class="nu0">0</span><span class="br0">}</span>; <span class="coMULTI">/* Don't allow cheating. */</span> <span class="kw1">if</span><span class="br0">(</span> !isatty<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> fprintf<span class="br0">(</span>stderr,<span class="st0">"stdin must be a terminal<span class="es0">\n</span>"</span><span class="br0">)</span>; <span class="kw1">return</span> <span class="nu0">1</span>; <span class="br0">}</span> <span class="coMULTI">/* Terminal name functions. */</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"ctermid(NULL) = %s<span class="es0">\n</span>"</span>, ctermid<span class="br0">(</span><span class="kw2">NULL</span><span class="br0">)</span><span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"ttyname(0) = %s<span class="es0">\n</span>"</span>, ttyname<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="br0">)</span>; <span class="coMULTI">/* Of course, the easy way to see how your terminal is set up is */</span> system<span class="br0">(</span><span class="st0">"stty -a"</span><span class="br0">)</span>; <span class="kw1">if</span><span class="br0">(</span> tcgetattr<span class="br0">(</span><span class="nu0">0</span>, &oldmodes<span class="br0">)</span> < <span class="nu0">0</span><span class="br0">)</span> <span class="br0">{</span> perror<span class="br0">(</span><span class="st0">"tcgetattr"</span><span class="br0">)</span>; <span class="kw1">return</span> <span class="nu0">1</span>; <span class="br0">}</span> <span class="coMULTI">/* Look at some iflag settings. */</span> <span class="kw1">for</span><span class="br0">(</span> i = <span class="nu0">0</span>; iflag<span class="br0">[</span>i<span class="br0">]</span> != <span class="kw2">NULL</span>; i ++<span class="br0">)</span> <span class="br0">{</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"%s is %s<span class="es0">\n</span>"</span>, iflagname<span class="br0">[</span>i<span class="br0">]</span>, iflag<span class="br0">[</span>i<span class="br0">]</span> & oldmodes.<span class="me1">c_iflag</span> ? <span class="st0">"on"</span> : <span class="st0">"off"</span><span class="br0">)</span>; <span class="br0">}</span> <span class="coMULTI">/* Turn off ICRNL and see what happens. */</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"Enter won't work as usual - use ^J to get a line accepted.<span class="es0">\n</span>"</span><span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"About to read two lines:<span class="es0">\n</span>"</span><span class="br0">)</span>; newmodes = oldmodes; newmodes.<span class="me1">c_iflag</span> &= ~ICRNL; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &newmodes<span class="br0">)</span>; gets<span class="br0">(</span>buf<span class="br0">)</span>; gets<span class="br0">(</span>buf<span class="br0">)</span>; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &oldmodes<span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"OK, ICRNL now back on.<span class="es0">\n</span>"</span><span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"Reading another line:<span class="es0">\n</span>"</span><span class="br0">)</span>; gets<span class="br0">(</span>buf<span class="br0">)</span>; <span class="coMULTI">/* Look at some oflag settings. */</span> <span class="kw1">for</span><span class="br0">(</span> i = <span class="nu0">0</span>; oflag<span class="br0">[</span>i<span class="br0">]</span> != <span class="kw2">NULL</span>; i ++<span class="br0">)</span> <span class="br0">{</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"%s is %s<span class="es0">\n</span>"</span>, oflagname<span class="br0">[</span>i<span class="br0">]</span>, oflag<span class="br0">[</span>i<span class="br0">]</span> & oldmodes.<span class="me1">c_oflag</span> ? <span class="st0">"on"</span> : <span class="st0">"off"</span><span class="br0">)</span>; <span class="br0">}</span> <span class="coMULTI">/* Turn ONLCR off and see what happens. */</span> newmodes = oldmodes; newmodes.<span class="me1">c_oflag</span> &= ~ONLCR; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &newmodes<span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"There is a <span class="es0">\\</span>n right here =><span class="es0">\n</span>"</span><span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"This would be a new line<span class="es0">\n</span>"</span><span class="br0">)</span>; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &oldmodes<span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"Are we back to normal?<span class="es0">\n</span>"</span><span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"Are we?<span class="es0">\n</span>"</span><span class="br0">)</span>; <span class="coMULTI">/* Turn ECHO off. */</span> newmodes = oldmodes; newmodes.<span class="me1">c_lflag</span> &= ~ECHO; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &newmodes<span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"Enter something: "</span><span class="br0">)</span>; gets<span class="br0">(</span>buf<span class="br0">)</span>; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">(</span><span class="st0">"You entered %s<span class="es0">\n</span>"</span>, buf<span class="br0">)</span>; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &oldmodes<span class="br0">)</span>; <span class="coMULTI">/* Turn ECHOCTL on. */</span> newmodes = oldmodes; newmodes.<span class="me1">c_lflag</span> |= ECHOCTL; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &newmodes<span class="br0">)</span>; gets<span class="br0">(</span>buf<span class="br0">)</span>; tcsetattr<span class="br0">(</span><span class="nu0">0</span>, TCSANOW, &oldmodes<span class="br0">)</span>; <span class="kw1">return</span> <span class="nu0">0</span>;<span class="br0">}</span></pre></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -