Abstract
之前討論用硬體Verilog顯示8位數的七段顯示器,本文要討論在Nios II用軟體C語言控制8位數的七段顯示器。Introduction使用環境:Quartus II 7.2 SP1 + Nios II EDS 7.2 SP1 + DE2(Cyclone II EP2C35F627C6) 在曾經討論過用硬體Verilog顯示8位數的七段顯示器,今天剛好有需要想在Nios II從軟體C語言去控制七段顯示器,本來想自己寫一個custom component,後來發現友晶的NIOS II Reference Design已經寫好了,只要會『用』就好了。 Nios II的Reference Design放在DE2 CD中的\DE2_demonstrations\SOPC_Builder\Reference_Design\下,(或從 下載),若你想自己從頭到尾自己由SOPC Builder建立,請參閱。C語言 / hello_world.c 1 /* 2 (C) OOMusou 2008 http://oomusou.cnblogs.com 3 4 Filename : hello_world.c 5 Compiler : Nios II gcc 6 Description : Demo how to display 7 seg. 7 Release : 04/27/2008 1.0 8 */ 9 #include < stdio.h > 10 #include " system.h " 11 #include " basic_io.h " 12 13 int main() { 14 int i; 15 for (i = 0 ; i != 100 ; i ++ ) { 16 Sleep( 1 ); 17 seg7_show(SEG7_DISPLAY_BASE, i); 18 } 19 } 20
你一定會問我,怎麼知道seg7_show()這個API可以在Nios II使用?我是在SEG7_LUT_8這個目錄下的inc\basic_io.h知道的,因為一個custom component一定會有一個include檔定義軟體能用的API。C語言 / basic_io.h 1 #ifndef __basic_io_H__ 2 #define __basic_io_H__ 3 4 #include < io.h > 5 #include < stdio.h > 6 #include < unistd.h > 7 #include < stdlib.h > 8 #include " system.h " 9 #include " sys/alt_irq.h " 10 11 // for GPIO 12 #define inport(base) IORD(base, 0) 13 #define outport(base, data) IOWR(base, 0, data) 14 #define get_pio_dir(base) IORD(base, 1) 15 #define set_pio_dir(base, data) IOWR(base, 1, data) 16 #define get_pio_irq_mask(base) IORD(base, 2) 17 #define set_pio_irq_mask(base, data) IOWR(base, 2, data) 18 #define get_pio_edge_cap(base) IORD(base, 3) 19 #define set_pio_edge_cap(base, data) IOWR(base, 3, data) 20 21 // for SEG7 Display 22 #define seg7_show(base,data) IOWR(base, 0, data) 23 24 // for Time Delay 25 #define msleep(msec) usleep(1000*msec); 26 #define Sleep(sec) msleep(1000*sec); 27 28 #endif
21行 // for SEG7 Display #define seg7_show(base,data) IOWR(base, 0, data)
我們發現了seg7_show()這個巨集,所以知道用這個巨集可以控制七段顯示器。 問題又來了,他要我們傳入七段顯示器的base address,我們要怎麼知道呢? 在SOPC Builder會分配每個component的base address,Nios II EDS在產生system library時,會將所有的address定義在\software\hello_world_0_syslib\Debug\system_description\system.h下。C語言 / system.h 1 /* system.h 2 * 3 * Machine generated for a CPU named "cpu_0" as defined in: 4 * c:\0Clare\DE2\switch_seg7_ip\software\hello_world_0_syslib\..\..\system_0.ptf 5 * 6 * Generated: 2008-04-27 00:14:19.203 7 * 8 */ 9 10 #ifndef __SYSTEM_H_ 11 #define __SYSTEM_H_ 12 13 /* 14 15 DO NOT MODIFY THIS FILE 16 17 Changing this file will have subtle consequences 18 which will almost certainly lead to a nonfunctioning 19 system. If you do modify this file, be aware that your 20 changes will be overwritten and lost when this file 21 is generated again. 22 23 DO NOT MODIFY THIS FILE 24 25 */ 26 27 /* ***************************************************************************** 28 * * 29 * License Agreement * 30 * * 31 * Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * 32 * All rights reserved. * 33 * * 34 * Permission is hereby granted, free of charge, to any person obtaining a * 35 * copy of this software and associated documentation files (the "Software"), * 36 * to deal in the Software without restriction, including without limitation * 37 * the rights to use, copy, modify, merge, publish, distribute, sublicense, * 38 * and/or sell copies of the Software, and to permit persons to whom the * 39 * Software is furnished to do so, subject to the following conditions: * 40 * * 41 * The above copyright notice and this permission notice shall be included in * 42 * all copies or substantial portions of the Software. * 43 * * 44 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * 45 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * 46 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 47 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * 48 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * 49 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * 50 * DEALINGS IN THE SOFTWARE. * 51 * * 52 * This agreement shall be governed in all respects by the laws of the State * 53 * of California and by the laws of the United States of America. * 54 * * 55 ***************************************************************************** */ 56 57 /* 58 * system configuration 59 * 60 */ 61 62 #define ALT_SYSTEM_NAME "system_0" 63 #define ALT_CPU_NAME "cpu_0" 64 #define ALT_CPU_ARCHITECTURE "altera_nios2" 65 #define ALT_DEVICE_FAMILY "CYCLONEII" 66 #define ALT_STDIN "/dev/jtag_uart_0" 67 #define ALT_STDIN_TYPE "altera_avalon_jtag_uart" 68 #define ALT_STDIN_BASE 0x006810f0 69 #define ALT_STDIN_DEV jtag_uart_0 70 #define ALT_STDIN_PRESENT 71 #define ALT_STDOUT "/dev/jtag_uart_0" 72 #define ALT_STDOUT_TYPE "altera_avalon_jtag_uart" 73 #define ALT_STDOUT_BASE 0x006810f0 74 #define ALT_STDOUT_DEV jtag_uart_0 75 #define ALT_STDOUT_PRESENT 76 #define ALT_STDERR "/dev/jtag_uart_0" 77 #define ALT_STDERR_TYPE "altera_avalon_jtag_uart" 78 #define ALT_STDERR_BASE 0x006810f0 79 #define ALT_STDERR_DEV jtag_uart_0 80 #define ALT_STDERR_PRESENT 81 #define ALT_CPU_FREQ 100000000 82 #define ALT_IRQ_BASE NULL 83 84 /* 85 * processor configuration 86 * 87 */ 88 89 #define NIOS2_CPU_IMPLEMENTATION "fast" 90 #define NIOS2_BIG_ENDIAN 0 91 92 #define NIOS2_ICACHE_SIZE 4096 93 #define NIOS2_DCACHE_SIZE 2048 94 #define NIOS2_ICACHE_LINE_SIZE 32 95 #define NIOS2_ICACHE_LINE_SIZE_LOG2 5 96 #define NIOS2_DCACHE_LINE_SIZE 4 97 #define NIOS2_DCACHE_LINE_SIZE_LOG2 2 98 #define NIOS2_FLUSHDA_SUPPORTED 99 100 #define NIOS2_EXCEPTION_ADDR 0x00800020 101 #define NIOS2_RESET_ADDR 0x00000000 102 #define NIOS2_BREAK_ADDR 0x00680020 103 104 #define NIOS2_HAS_DEBUG_STUB 105 106 #define NIOS2_CPU_ID_SIZE 1 107 #define NIOS2_CPU_ID_VALUE 0 108 109 /* 110 * A define for each class of peripheral 111 * 112 */ 113 114 #define __ALTERA_AVALON_TRI_STATE_BRIDGE 115 #define __ALTERA_AVALON_CFI_FLASH 116 #define __ALTERA_AVALON_NEW_SDRAM_CONTROLLER 117 #define __ALTERA_AVALON_EPCS_FLASH_CONTROLLER 118 #define __ALTERA_AVALON_JTAG_UART 119 #define __ALTERA_AVALON_UART 120 #define __ALTERA_AVALON_TIMER 121 #define __ALTERA_AVALON_LCD_16207 122 #define __ALTERA_AVALON_PIO 123 #define __SEG7_LUT_8 124 #define __SRAM_16BIT_512K 125 #define __DM9000A 126 #define __ISP1362 127 #define __BINARY_VGA_CONTROLLER 128 #define __AUDIO_DAC_FIFO 129 130 /* 131 * tri_state_bridge_0 configuration 132 * 133 */ 134 135 #define TRI_STATE_BRIDGE_0_NAME "/dev/tri_state_bridge_0" 136 #define TRI_STATE_BRIDGE_0_TYPE "altera_avalon_tri_state_bridge" 137 #define ALT_MODULE_CLASS_tri_state_bridge_0 altera_avalon_tri_state_bridge 138 139 /* 140 * cfi_flash_0 configuration 141 * 142 */ 143 144 #define CFI_FLASH_0_NAME "/dev/cfi_flash_0" 145 #define CFI_FLASH_0_TYPE "altera_avalon_cfi_flash" 146 #define CFI_FLASH_0_BASE 0x00000000 147 #define CFI_FLASH_0_SPAN 4194304 148 #define CFI_FLASH_0_SETUP_VALUE 40 149 #define CFI_FLASH_0_WAIT_VALUE 160 150 #define CFI_FLASH_0_HOLD_VALUE 40 151 #define CFI_FLASH_0_TIMING_UNITS "ns" 152 #define CFI_FLASH_0_UNIT_MULTIPLIER 1 153 #define CFI_FLASH_0_SIZE 4194304 154 #define ALT_MODULE_CLASS_cfi_flash_0 altera_avalon_cfi_flash 155 156 /* 157 * sdram_0 configuration 158 * 159 */ 160 161 #define SDRAM_0_NAME "/dev/sdram_0" 162 #define SDRAM_0_TYPE "altera_avalon_new_sdram_controller" 163 #define SDRAM_0_BASE 0x00800000 164 #define SDRAM_0_SPAN 8388608 165 #define SDRAM_0_REGISTER_DATA_IN 1 166 #define SDRAM_0_SIM_MODEL_BASE 1 167 #define SDRAM_0_SDRAM_DATA_WIDTH 16 168 #define SDRAM_0_SDRAM_ADDR_WIDTH 12 169 #define SDRAM_0_SDRAM_ROW_WIDTH 12 170 #define SDRAM_0_SDRAM_COL_WIDTH 8 171 #define SDRAM_0_SDRAM_NUM_CHIPSELECTS 1 172 #define SDRAM_0_SDRAM_NUM_BANKS 4 173 #define SDRAM_0_REFRESH_PERIOD 15.625 174 #define SDRAM_0_POWERUP_DELAY 100.0 175 #define SDRAM_0_CAS_LATENCY 3 176 #define SDRAM_0_T_RFC 70.0 177 #define SDRAM_0_T_RP 20.0 178 #define SDRAM_0_T_MRD 3 179 #define SDRAM_0_T_RCD 20.0 180 #define SDRAM_0_T_AC 5.5 181 #define SDRAM_0_T_WR 14.0 182 #define SDRAM_0_INIT_REFRESH_COMMANDS 2 183 #define SDRAM_0_INIT_NOP_DELAY 0.0 184 #define SDRAM_0_SHARED_DATA 0 185 #define SDRAM_0_SDRAM_BANK_WIDTH 2 186 #define SDRAM_0_TRISTATE_BRIDGE_SLAVE "" 187 #define SDRAM_0_STARVATION_INDICATOR 0 188 #define SDRAM_0_IS_INITIALIZED 1 189 #define ALT_MODULE_CLASS_sdram_0 altera_avalon_new_sdram_controller 190 191 /* 192 * epcs_controller configuration 193 * 194 */ 195 196 #define EPCS_CONTROLLER_NAME "/dev/epcs_controller" 197 #define EPCS_CONTROLLER_TYPE "altera_avalon_epcs_flash_controller" 198 #define EPCS_CONTROLLER_BASE 0x00680800 199 #define EPCS_CONTROLLER_SPAN 2048 200 #define EPCS_CONTROLLER_IRQ 0 201 #define EPCS_CONTROLLER_DATABITS 8 202 #define EPCS_CONTROLLER_TARGETCLOCK 20 203 #define EPCS_CONTROLLER_CLOCKUNITS "MHz" 204 #define EPCS_CONTROLLER_CLOCKMULT 1000000 205 #define EPCS_CONTROLLER_NUMSLAVES 1 206 #define EPCS_CONTROLLER_ISMASTER 1 207 #define EPCS_CONTROLLER_CLOCKPOLARITY 0 208 #define EPCS_CONTROLLER_CLOCKPHASE 0 209 #define EPCS_CONTROLLER_LSBFIRST 0 210 #define EPCS_CONTROLLER_EXTRADELAY 0 211 #define EPCS_CONTROLLER_TARGETSSDELAY 100 212 #define EPCS_CONTROLLER_DELAYUNITS "us" 213 #define EPCS_CONTROLLER_DELAYMULT "1e-006" 214 #define EPCS_CONTROLLER_PREFIX "epcs_" 215 #define EPCS_CONTROLLER_REGISTER_OFFSET 0x200 216 #define EPCS_CONTROLLER_USE_ASMI_ATOM 1 217 #define EPCS_CONTROLLER_CLOCKUNIT "kHz" 218 #define EPCS_CONTROLLER_DELAYUNIT "us" 219 #define ALT_MODULE_CLASS_epcs_controller altera_avalon_epcs_flash_controller 220 221 /* 222 * jtag_uart_0 configuration 223 * 224 */ 225 226 #define JTAG_UART_0_NAME "/dev/jtag_uart_0" 227 #define JTAG_UART_0_TYPE "altera_avalon_jtag_uart" 228 #define JTAG_UART_0_BASE 0x006810f0 229 #define JTAG_UART_0_SPAN 8 230 #define JTAG_UART_0_IRQ 1 231 #define JTAG_UART_0_WRITE_DEPTH 64 232 #define JTAG_UART_0_READ_DEPTH 64 233 #define JTAG_UART_0_WRITE_THRESHOLD 8 234 #define JTAG_UART_0_READ_THRESHOLD 8 235 #define JTAG_UART_0_READ_CHAR_STREAM "" 236 #define JTAG_UART_0_SHOWASCII 1 237 #define JTAG_UART_0_READ_LE 0 238 #define JTAG_UART_0_WRITE_LE 0 239 #define JTAG_UART_0_ALTERA_SHOW_UNRELEASED_JTAG_UART_FEATURES 0 240 #define ALT_MODULE_CLASS_jtag_uart_0 altera_avalon_jtag_uart 241 242 /* 243 * uart_0 configuration 244 * 245 */ 246 247 #define UART_0_NAME "/dev/uart_0" 248 #define UART_0_TYPE "altera_avalon_uart" 249 #define UART_0_BASE 0x00681000 250 #define UART_0_SPAN 32 251 #define UART_0_IRQ 2 252 #define UART_0_BAUD 115200 253 #define UART_0_DATA_BITS 8 254 #define UART_0_FIXED_BAUD 1 255 #define UART_0_PARITY 'N' 256 #define UART_0_STOP_BITS 1 257 #define UART_0_USE_CTS_RTS 0 258 #define UART_0_USE_EOP_REGISTER 0 259 #define UART_0_SIM_TRUE_BAUD 0 260 #define UART_0_SIM_CHAR_STREAM "" 261 #define UART_0_FREQ 100000000 262 #define ALT_MODULE_CLASS_uart_0 altera_avalon_uart 263 264 /* 265 * timer_0 configuration 266 * 267 */ 268 269 #define TIMER_0_NAME "/dev/timer_0" 270 #define TIMER_0_TYPE "altera_avalon_timer" 271 #define TIMER_0_BASE 0x00681020 272 #define TIMER_0_SPAN 32 273 #define TIMER_0_IRQ 3 274 #define TIMER_0_ALWAYS_RUN 0 275 #define TIMER_0_FIXED_PERIOD 0 276 #define TIMER_0_SNAPSHOT 1 277 #define TIMER_0_PERIOD 1.0 278 #define TIMER_0_PERIOD_UNITS "ms" 279 #define TIMER_0_RESET_OUTPUT 0 280 #define TIMER_0_TIMEOUT_PULSE_OUTPUT 0 281 #define TIMER_0_LOAD_VALUE 99999 282 #define TIMER_0_MULT 0.001 283 #define TIMER_0_FREQ 100000000 284 #define ALT_MODULE_CLASS_timer_0 altera_avalon_timer 285 286 /* 287 * timer_1 configuration 288 * 289 */ 290 291 #define TIMER_1_NAME "/dev/timer_1" 292 #define TIMER_1_TYPE "altera_avalon_timer" 293 #define TIMER_1_BASE 0x00681040 294 #define TIMER_1_SPAN 32 295 #define TIMER_1_IRQ 4 296 #define TIMER_1_ALWAYS_RUN 0 297 #define TIMER_1_FIXED_PERIOD 0 298 #define TIMER_1_SNAPSHOT 1 299 #define TIMER_1_PERIOD 1.0 300 #define TIMER_1_PERIOD_UNITS "ms" 301 #define TIMER_1_RESET_OUTPUT 0 302 #define TIMER_1_TIMEOUT_PULSE_OUTPUT 0 303 #define TIMER_1_LOAD_VALUE 99999 304 #define TIMER_1_MULT 0.001 305 #define TIMER_1_FREQ 100000000 306 #define ALT_MODULE_CLASS_timer_1 altera_avalon_timer 307 308 /* 309 * lcd_16207_0 configuration 310 * 311 */ 312 313 #define LCD_16207_0_NAME "/dev/lcd_16207_0" 314 #define LCD_16207_0_TYPE "altera_avalon_lcd_16207" 315 #define LCD_16207_0_BASE 0x00681060 316 #define LCD_16207_0_SPAN 16 317 #define ALT_MODULE_CLASS_lcd_16207_0 altera_avalon_lcd_16207 318 319 /* 320 * led_red configuration 321 * 322 */ 323 324 #define LED_RED_NAME "/dev/led_red" 325 #define LED_RED_TYPE "altera_avalon_pio" 326 #define LED_RED_BASE 0x00681070 327 #define LED_RED_SPAN 16 328 #define LED_RED_DO_TEST_BENCH_WIRING 0 329 #define LED_RED_DRIVEN_SIM_VALUE 0 330 #define LED_RED_HAS_TRI 0 331 #define LED_RED_HAS_OUT 1 332 #define LED_RED_HAS_IN 0 333 #define LED_RED_CAPTURE 0 334 #define LED_RED_DATA_WIDTH 18 335 #define LED_RED_EDGE_TYPE "NONE" 336 #define LED_RED_IRQ_TYPE "NONE" 337 #define LED_RED_BIT_CLEARING_EDGE_REGISTER 0 338 #define LED_RED_FREQ 100000000 339 #define ALT_MODULE_CLASS_led_red altera_avalon_pio 340 341 /* 342 * led_green configuration 343 * 344 */ 345 346 #define LED_GREEN_NAME "/dev/led_green" 347 #define LED_GREEN_TYPE "altera_avalon_pio" 348 #define LED_GREEN_BASE 0x00681080 349 #define LED_GREEN_SPAN 16 350 #define LED_GREEN_DO_TEST_BENCH_WIRING 0 351 #define LED_GREEN_DRIVEN_SIM_VALUE 0 352 #define LED_GREEN_HAS_TRI 0 353 #define LED_GREEN_HAS_OUT 1 354 #define LED_GREEN_HAS_IN 0 355 #define LED_GREEN_CAPTURE 0 356 #define LED_GREEN_DATA_WIDTH 9 357 #define LED_GREEN_EDGE_TYPE "NONE" 358 #define LED_GREEN_IRQ_TYPE "NONE" 359 #define LED_GREEN_BIT_CLEARING_EDGE_REGISTER 0 360 #define LED_GREEN_FREQ 100000000 361 #define ALT_MODULE_CLASS_led_green altera_avalon_pio 362 363 /* 364 * button_pio configuration 365 * 366 */ 367 368 #define BUTTON_PIO_NAME "/dev/button_pio" 369 #define BUTTON_PIO_TYPE "altera_avalon_pio" 370 #define BUTTON_PIO_BASE 0x00681090 371 #define BUTTON_PIO_SPAN 16 372 #define BUTTON_PIO_IRQ 5 373 #define BUTTON_PIO_DO_TEST_BENCH_WIRING 0 374 #define BUTTON_PIO_DRIVEN_SIM_VALUE 0 375 #define BUTTON_PIO_HAS_TRI 0 376 #define BUTTON_PIO_HAS_OUT 0 377 #define BUTTON_PIO_HAS_IN 1 378 #define BUTTON_PIO_CAPTURE 1 379 #define BUTTON_PIO_DATA_WIDTH 4 380 #define BUTTON_PIO_EDGE_TYPE "FALLING" 381 #define BUTTON_PIO_IRQ_TYPE "EDGE" 382 #define BUTTON_PIO_BIT_CLEARING_EDGE_REGISTER 0 383 #define BUTTON_PIO_FREQ 100000000 384 #define ALT_MODULE_CLASS_button_pio altera_avalon_pio 385 386 /* 387 * switch_pio configuration 388 * 389 */ 390 391 #define SWITCH_PIO_NAME "/dev/switch_pio" 392 #define SWITCH_PIO_TYPE "altera_avalon_pio" 393 #define SWITCH_PIO_BASE 0x006810a0 394 #define SWITCH_PIO_SPAN 16 395 #define SWITCH_PIO_DO_TEST_BENCH_WIRING 0 396 #define SWITCH_PIO_DRIVEN_SIM_VALUE 0 397 #define SWITCH_PIO_HAS_TRI 0 398 #define SWITCH_PIO_HAS_OUT 0 399 #define SWITCH_PIO_HAS_IN 1 400 #define SWITCH_PIO_CAPTURE 0 401 #define SWITCH_PIO_DATA_WIDTH 18 402 #define SWITCH_PIO_EDGE_TYPE "NONE" 403 #define SWITCH_PIO_IRQ_TYPE "NONE" 404 #define SWITCH_PIO_BIT_CLEARING_EDGE_REGISTER 0 405 #define SWITCH_PIO_FREQ 100000000 406 #define ALT_MODULE_CLASS_switch_pio altera_avalon_pio 407 408 /* 409 * SEG7_Display configuration 410 * 411 */ 412 413 #define SEG7_DISPLAY_NAME "/dev/SEG7_Display" 414 #define SEG7_DISPLAY_TYPE "seg7_lut_8" 415 #define SEG7_DISPLAY_BASE 0x00681100 416 #define SEG7_DISPLAY_SPAN 4 417 #define SEG7_DISPLAY_HDL_PARAMETERS "" 418 #define ALT_MODULE_CLASS_SEG7_Display seg7_lut_8 419 420 /* 421 * sram_0 configuration 422 * 423 */ 424 425 #define SRAM_0_NAME "/dev/sram_0" 426 #define SRAM_0_TYPE "sram_16bit_512k" 427 #define SRAM_0_BASE 0x00600000 428 #define SRAM_0_SPAN 524288 429 #define SRAM_0_HDL_PARAMETERS "" 430 #define ALT_MODULE_CLASS_sram_0 sram_16bit_512k 431 432 /* 433 * DM9000A configuration 434 * 435 */ 436 437 #define DM9000A_NAME "/dev/DM9000A" 438 #define DM9000A_TYPE "dm9000a" 439 #define DM9000A_BASE 0x006810f8 440 #define DM9000A_SPAN 8 441 #define DM9000A_IRQ 6 442 #define DM9000A_HDL_PARAMETERS "" 443 #define ALT_MODULE_CLASS_DM9000A dm9000a 444 445 /* 446 * ISP1362/avalon_slave_0 configuration 447 * 448 */ 449 450 #define ISP1362_AVALON_SLAVE_0_NAME "/dev/ISP1362" 451 #define ISP1362_AVALON_SLAVE_0_TYPE "isp1362" 452 #define ISP1362_AVALON_SLAVE_0_BASE 0x006810b0 453 #define ISP1362_AVALON_SLAVE_0_SPAN 16 454 #define ISP1362_AVALON_SLAVE_0_IRQ 7 455 #define ISP1362_AVALON_SLAVE_0_HDL_PARAMETERS "" 456 #define ALT_MODULE_CLASS_ISP1362 isp1362 457 458 /* 459 * ISP1362/avalon_slave_1 configuration 460 * 461 */ 462 463 #define ISP1362_AVALON_SLAVE_1_NAME "/dev/ISP1362" 464 #define ISP1362_AVALON_SLAVE_1_TYPE "isp1362" 465 #define ISP1362_AVALON_SLAVE_1_IRQ 8 466 #define ISP1362_AVALON_SLAVE_1_HDL_PARAMETERS "" 467 #define ALT_MODULE_CLASS_ISP1362 isp1362 468 469 /* 470 * VGA_0 configuration 471 * 472 */ 473 474 #define VGA_0_NAME "/dev/VGA_0" 475 #define VGA_0_TYPE "binary_vga_controller" 476 #define VGA_0_BASE 0x00400000 477 #define VGA_0_SPAN 2097152 478 #define ALT_MODULE_CLASS_VGA_0 binary_vga_controller 479 480 /* 481 * Audio_0 configuration 482 * 483 */ 484 485 #define AUDIO_0_NAME "/dev/Audio_0" 486 #define AUDIO_0_TYPE "audio_dac_fifo" 487 #define AUDIO_0_BASE 0x00681104 488 #define AUDIO_0_SPAN 4 489 #define ALT_MODULE_CLASS_Audio_0 audio_dac_fifo 490 491 /* 492 * SD_DAT configuration 493 * 494 */ 495 496 #define SD_DAT_NAME "/dev/SD_DAT" 497 #define SD_DAT_TYPE "altera_avalon_pio" 498 #define SD_DAT_BASE 0x006810c0 499 #define SD_DAT_SPAN 16 500 #define SD_DAT_DO_TEST_BENCH_WIRING 0 501 #define SD_DAT_DRIVEN_SIM_VALUE 0 502 #define SD_DAT_HAS_TRI 1 503 #define SD_DAT_HAS_OUT 0 504 #define SD_DAT_HAS_IN 0 505 #define SD_DAT_CAPTURE 0 506 #define SD_DAT_DATA_WIDTH 1 507 #define SD_DAT_EDGE_TYPE "NONE" 508 #define SD_DAT_IRQ_TYPE "NONE" 509 #define SD_DAT_BIT_CLEARING_EDGE_REGISTER 0 510 #define SD_DAT_FREQ 100000000 511 #define ALT_MODULE_CLASS_SD_DAT altera_avalon_pio 512 513 /* 514 * SD_CMD configuration 515 * 516 */ 517 518 #define SD_CMD_NAME "/dev/SD_CMD" 519 #define SD_CMD_TYPE "altera_avalon_pio" 520 #define SD_CMD_BASE 0x006810d0 521 #define SD_CMD_SPAN 16 522 #define SD_CMD_DO_TEST_BENCH_WIRING 0 523 #define SD_CMD_DRIVEN_SIM_VALUE 0 524 #define SD_CMD_HAS_TRI 1 525 #define SD_CMD_HAS_OUT 0 526 #define SD_CMD_HAS_IN 0 527 #define SD_CMD_CAPTURE 0 528 #define SD_CMD_DATA_WIDTH 1 529 #define SD_CMD_EDGE_TYPE "NONE" 530 #define SD_CMD_IRQ_TYPE "NONE" 531 #define SD_CMD_BIT_CLEARING_EDGE_REGISTER 0 532 #define SD_CMD_FREQ 100000000 533 #define ALT_MODULE_CLASS_SD_CMD altera_avalon_pio 534 535 /* 536 * SD_CLK configuration 537 * 538 */ 539 540 #define SD_CLK_NAME "/dev/SD_CLK" 541 #define SD_CLK_TYPE "altera_avalon_pio" 542 #define SD_CLK_BASE 0x006810e0 543 #define SD_CLK_SPAN 16 544 #define SD_CLK_DO_TEST_BENCH_WIRING 0 545 #define SD_CLK_DRIVEN_SIM_VALUE 0 546 #define SD_CLK_HAS_TRI 0 547 #define SD_CLK_HAS_OUT 1 548 #define SD_CLK_HAS_IN 0 549 #define SD_CLK_CAPTURE 0 550 #define SD_CLK_DATA_WIDTH 1 551 #define SD_CLK_EDGE_TYPE "NONE" 552 #define SD_CLK_IRQ_TYPE "NONE" 553 #define SD_CLK_BIT_CLEARING_EDGE_REGISTER 0 554 #define SD_CLK_FREQ 100000000 555 #define ALT_MODULE_CLASS_SD_CLK altera_avalon_pio 556 557 /* 558 * system library configuration 559 * 560 */ 561 562 #define ALT_MAX_FD 32 563 #define ALT_SYS_CLK TIMER_0 564 #define ALT_TIMESTAMP_CLK none 565 566 /* 567 * Devices associated with code sections. 568 * 569 */ 570 571 #define ALT_TEXT_DEVICE SDRAM_0 572 #define ALT_RODATA_DEVICE SDRAM_0 573 #define ALT_RWDATA_DEVICE SDRAM_0 574 #define ALT_EXCEPTIONS_DEVICE SDRAM_0 575 #define ALT_RESET_DEVICE CFI_FLASH_0 576 577 578 #endif /* __SYSTEM_H_ */
413行 #define SEG7_DISPLAY_NAME "/dev/SEG7_Display" #define SEG7_DISPLAY_TYPE "seg7_lut_8" #define SEG7_DISPLAY_BASE 0x00681100 #define SEG7_DISPLAY_SPAN 4 #define SEG7_DISPLAY_HDL_PARAMETERS "" #define ALT_MODULE_CLASS_SEG7_Display seg7_lut_8
我們發現和七段顯示器相關的巨集定義都在這,其中SEG7_DISPLAY_BASE定義的就是其base address,這也是為什麼在hello_world.c的第9行 #include < stdio.h > #include " system.h " #include " basic_io.h "
要include system.h和basic_io.h的原因。完整程式碼下載Conclusion本文的目的不只是在討論如何在Nios II用C語言去控制七段顯示器,重點是學習將來遇到新的controller時,要怎麼在軟體C語言中使用,如何到.h檔中找API?如何到system.h找定義base address的巨集?這才是更重要的。See Also