(原創) 如何在Nios II顯示8位數的七段顯示器? (IC Design) (DE2) (Nios II)

Abstract
之前討論用硬體Verilog顯示8位數的七段顯示器,本文要討論在Nios II用軟體C語言控制8位數的七段顯示器。

Introduction
使用環境:Quartus II 7.2 SP1 + Nios II EDS 7.2 SP1 + DE2(Cyclone II EP2C35F627C6)

(原創) 如何顯示8位數的七段顯示器? (IC Design) (Verilog) (DE2)曾經討論過用硬體Verilog顯示8位數的七段顯示器,今天剛好有需要想在Nios II從軟體C語言去控制七段顯示器,本來想自己寫一個custom component,後來發現友晶的NIOS II Reference Design已經寫好了,只要會『用』就好了。

Nios II的Reference Design放在DE2 CD中的\DE2_demonstrations\SOPC_Builder\Reference_Design\下,(或從http://www.terasic.com/downloads/cd-rom/de2/ 下載),若你想自己從頭到尾自己由SOPC Builder建立,請參閱(原創) 如何自己用SOPC Builder建立一個能在DE2上跑μC/OS-II的Nios II系統? (IC Design) (DE2) (Quartus II) (Nios II) (SOPC Builder) (μC/OS-II)

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的原因。

完整程式碼下載
switch_seg7_sw.7z

Conclusion
本文的目的不只是在討論如何在Nios II用C語言去控制七段顯示器,重點是學習將來遇到新的controller時,要怎麼在軟體C語言中使用,如何到.h檔中找API?如何到system.h找定義base address的巨集?這才是更重要的。

See Also
(原創) 如何顯示8位數的七段顯示器? (IC Design) (Verilog) (DE2)
(原創) 如何自己用SOPC Builder建立一個能在DE2上跑μC/OS-II的Nios II系統? (IC Design) (DE2) (Quartus II) (Nios II) (SOPC Builder) (μC/OS-II)
(原創) 如何在Nios II使用16x2字元液晶顯示器? (IC Design) (DE2) (Nios II)
(原創) 如何以10進位顯示8位數的七段顯示器? (SOC) (Verilog) (DE2)
(原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值