📄 sample_gpio_driver.html
字号:
len = pflags_proc_output <span class="br0">(</span>page<span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>len <= off + count<span class="br0">)</span> *eof = <span class="nu0">1</span>; *start = page + off; len -= off; <span class="kw1">if</span> <span class="br0">(</span>len > count<span class="br0">)</span> len = count; <span class="kw1">if</span> <span class="br0">(</span>len < <span class="nu0">0</span><span class="br0">)</span> len = <span class="nu0">0</span>; <span class="kw1">return</span> len;<span class="br0">}</span> <span class="co1">// simpler vesion</span> <span class="kw4">static</span> <span class="kw4">int</span>pflags_simper_read_proc <span class="br0">(</span><span class="kw4">char</span> *page, <span class="kw4">char</span> **start, off_t off, <span class="kw4">int</span> count, <span class="kw4">int</span> *eof, <span class="kw4">void</span> *data<span class="br0">)</span><span class="br0">{</span> <span class="kw4">int</span> len = <span class="nu0">0</span>; <span class="kw1">if</span> <span class="br0">(</span> off == <span class="nu0">0</span> <span class="br0">)</span> <span class="br0">{</span> len = pflags_proc_output <span class="br0">(</span>page<span class="br0">)</span>; <span class="br0">}</span> <span class="kw1">return</span> len;<span class="br0">}</span> </pre><p> The code to write the data into the <strong>page</strong> buffer follows</p><pre class="code c"><span class="kw4">static</span> <span class="kw4">int</span>pflags_proc_output <span class="br0">(</span><span class="kw4">char</span> *buf<span class="br0">)</span><span class="br0">{</span> <span class="kw4">char</span> *p; <span class="kw4">unsigned</span> <span class="kw4">short</span> i, data,dir,maska,maskb,polar,edge,inen,both; p = buf; data = *pFIO_FLAG_D; dir = *pFIO_DIR; maska = *pFIO_MASKA_D; maskb = *pFIO_MASKB_D; polar = *pFIO_POLAR; both = *pFIO_BOTH; edge = *pFIO_EDGE; inen = *pFIO_INEN; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_DIR <span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, dir<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_MASKA<span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, maska<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_MASKB<span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, maskb<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_POLAR<span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, polar<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_EDGE <span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, edge<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_INEN <span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, inen<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_BOTH <span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, both<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"FIO_FLAG_D<span class="es0">\t</span>: = 0x%X<span class="es0">\n</span>"</span>, data<span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">"PIN<span class="es0">\t</span>:DATA DIR INEN EDGE BOTH POLAR MASKA MASKB<span class="es0">\n</span>"</span><span class="br0">)</span>; p += sprintf <span class="br0">(</span>p, <span class="st0">" <span class="es0">\t</span>:H/L O/I D/E E/L B/S L/H S/C S/C<span class="es0">\n</span>"</span><span class="br0">)</span>; <span class="kw1">for</span> <span class="br0">(</span>i = <span class="nu0">0</span>; i < <span class="nu0">16</span>; i++<span class="br0">)</span> p += sprintf <span class="br0">(</span>p, <span class="st0">"PF%d<span class="es0">\t</span>: %d....%d....%d....%d....%d....%d.....%d.....%d <span class="es0">\n</span>"</span>, i, <span class="br0">(</span><span class="br0">(</span>data >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span>, <span class="br0">(</span><span class="br0">(</span>dir >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span>, <span class="br0">(</span><span class="br0">(</span>inen >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span>, <span class="br0">(</span><span class="br0">(</span>edge >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span>, <span class="br0">(</span><span class="br0">(</span>both >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span>, <span class="br0">(</span><span class="br0">(</span>polar >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span>, <span class="br0">(</span><span class="br0">(</span>maska >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span>, <span class="br0">(</span><span class="br0">(</span>maskb >> i<span class="br0">)</span> & <span class="nu0">1</span><span class="br0">)</span><span class="br0">)</span>; <span class="kw1">return</span> p - buf;<span class="br0">}</span> </pre></div><!-- SECTION [8125-10514] --><h3><a name="test_the_driver" id="test_the_driver">Test the Driver</a></h3><div class="level3"><p>There is an existing test program now. In order to successfully build and run the PFLAGS Test Application, following kernel and user space adjustments needs to be done.</p><p>1) In your uClinux-dist folder enter:</p><p>#make menuconfig </p><pre class="code"> [ ] Default all settings (lose changes) [*] Customize Kernel Settings (NEW) [*] Customize Vendor/User Settings (NEW) [ ] Update Default Vendor Settings</pre><p>Check Customize Kernel Settings and Customize Vendor/User Settings, then save and exit During kernel configuration under ‘Character devices’, Blackfin BF533/2/1 Programmable Flags Driver’. </p><pre class="code"> [ ] Blackfin BF533/2/1 SPI port support [ ] Blackfin BF533/2/1 ADSP SPI ADC support [*] Blackfin BF533/2/1 Programmable Flags Driver [ ] Virtual terminal [ ] Non-standard serial port support Serial drivers ---> [*] Unix98 PTY support [*] Legacy (BSD) PTY support (256) Maximum number of legacy PTY in use [ ] QIC-02 tape support IPMI ---> Watchdog Cards ---> [ ] Enhanced Real Time Clock Support [ ] Generic /dev/rtc emulation [*] Blackfin Real Time Clock Support [*] Blackfin Power Management support [ ] Double Talk PC internal speech card support [ ] Siemens R3964 line discipline Ftape, the floppy tape device driver ---> [ ] /dev/agpgart (AGP Support) [ ] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) [ ] RAW driver (/dev/raw/rawN) (OBSOLETE)</pre><p> Save and exit. We are now leaving kernel configuration and enter user space configuration. Here we need to enable ‘PFLAGS test program’ under ‘Blackfin test programs’. </p><pre class="code"> Core Applications ---> Library Configuration ---> Flash Tools ---> Filesystem Applications ---> Network Applications ---> Miscellaneous Applications ---> BusyBox ---> Tinylogin ---> MicroWindows ---> Games ---> Miscellaneous Configuration ---> Debug Builds ---> Blackfin test programs ---> Blackfin app programs ---></pre><pre class="code"> [ ] RTC test program [ ] DPMC test program [ ] AUDIO test program [ ] VIDEO test program [*] PFLAGS test program [ ] Still to write</pre><p> Save and exit</p><p>2) Recompile kernel and user space</p><p>3) Starting the Application: From the shell, input cmd :pflags_test </p><pre class="code"> root:~> pflags_test</pre><p> ########################## PFLAGS TEST ############################### open success /dev/pf2 open success /dev/pf5</p><p>Press BTN1 to EXIT root:~></p><p>This will toggle STAMP board LED1 until Button1 is pressed.</p><p>4) Test PROC filesystem interface</p><p>From the shell type: cat /proc/driver/pflags</p></div><!-- SECTION [10515-13904] --><h3><a name="sample_proc_output" id="sample_proc_output">Sample Proc Output</a></h3><div class="level3"><p>Here is an example of the <strong>/proc</strong> output</p><pre class="code">FIO_DIR : = 0x1FFIO_MASKA : = 0x0FIO_MASKB : = 0x80FIO_POLAR : = 0x160FIO_EDGE : = 0x0FIO_INEN : = 0x1E0FIO_BOTH : = 0x0FIO_FLAG_D : = 0x1DPIN :DATA DIR INEN EDGE BOTH POLAR MASKA MASKB :H/L O/I D/E E/L B/S L/H S/C S/CPF0 : 1....1....0....0....0....0.....0.....0PF1 : 0....1....0....0....0....0.....0.....0PF2 : 1....1....0....0....0....0.....0.....0PF3 : 1....1....0....0....0....0.....0.....0PF4 : 1....1....0....0....0....0.....0.....0PF5 : 0....0....1....0....0....1.....0.....0PF6 : 0....0....1....0....0....1.....0.....0PF7 : 0....0....1....0....0....0.....0.....1PF8 : 0....0....1....0....0....1.....0.....0PF9 : 0....0....0....0....0....0.....0.....0PF10 : 0....0....0....0....0....0.....0.....0PF11 : 0....0....0....0....0....0.....0.....0PF12 : 0....0....0....0....0....0.....0.....0PF13 : 0....0....0....0....0....0.....0.....0PF14 : 0....0....0....0....0....0.....0.....0PF15 : 0....0....0....0....0....0.....0.....0</pre></div><!-- SECTION [13905-] --></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -