linux adc是混雜設備驅動;在linux2.6.30.4中,系統已經自帶了ADC通用驅動檔“arch/arm/plat-s3c24xx/adc.c”,它是以平台驅動設備模型的架構來寫的,裡面是一些比較通用穩定的程式碼。
本教學操作環境:linux2.6.30.4系統、Dell G3電腦。
linux adc是什麼裝置?
linux 混雜裝置驅動程式之adc驅動程式
linux2.6.30.4中,系統已經自有了ADC通用驅動檔---arch/arm/plat-s3c24xx/adc.c,它是以平台驅動裝置模型的架構來寫的,裡面是一些比較通用穩定的程式碼,但是linux2.6.30.4版本的ADC通用驅動檔並不完善,居然沒有讀函數。後來我去看了linux3.8版本的ADC通用檔案----arch/arm/plat-samsung/adc.c才是比較完善的。
但本節並不是分析這個文件,而是以另一個架構來寫ADC驅動,因為ADC驅動實在比較簡單,就沒有使用平台驅動設備模型為架構來編寫了,這次我們使用的是混雜(misc)裝置驅動。
問:什麼是misc裝置驅動程式?
答案:miscdevice共用一個主裝置號碼MISC_MAJOR(10),但次裝置號碼不同。所有的miscdevice設備形成一條鍊錶,對設備存取時核心會根據設備號碼來尋找對應的miscdevice設備,然後呼叫其file_operations結構體中註冊的檔案操作介面進行操作。
1 2 3 4 5 6 7 8 |
|
#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
adcdone_int_handler,而flags為IRQF_SHARED,即共享中斷,因為觸控螢幕裡也要申請ADC中斷,最後註冊一個混雜裝置.
當應用程式open ("/dev/adc",...)時,就會呼叫到驅動裡面的open函數,那麼我們來看看open函數做了什麼?
1 2 3 4 5 6 7 8 9 10 11 12 |
|
當應用程式read時,就會呼叫到驅動裡面的read函數,那麼我們來看看read函數做了什麼?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
問:什麼時候ev_adc>0?預設ev_adc = 0
答案:在adcdone_int_handler中斷處理函數裡,等資料讀出後,ev_adc被設定為1。
ADC中斷處理函數adcdone_int_handler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
一、open函數裡,設定類比輸入通道,設定預分頻值
二、read函數裡,啟動AD轉換,進程休眠
三、adc_irq函数里,AD转换结束后触发ADC中断,在ADC中断处理函数将数据读出,唤醒进程
四、read函数里,进程被唤醒后,将adc转换数据传给应用程序
ADC驱动参考源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
相关推荐:《Linux视频教程》
以上是linux adc是什麼設備的詳細內容。更多資訊請關注PHP中文網其他相關文章!