博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原創) 如何在Nios II顯示8位數的七段顯示器? (IC Design) (DE2) (Nios II)
阅读量:5876 次
发布时间:2019-06-19

本文共 20324 字,大约阅读时间需要 67 分钟。

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

转载地址:http://aqzix.baihongyu.com/

你可能感兴趣的文章
React Hooks ---useMemo
查看>>
ios 3DTouch初识
查看>>
SpringBoot使用Sharding-JDBC读写分离
查看>>
宅社AcgClub API上线
查看>>
如何用 Vue-CLI 3 打包 npm 包
查看>>
ElementUI Table组件,如何在多页数据下勾选多行
查看>>
什么是Scala Scala如何学习和入门之我的个人学习经验以及相关实战
查看>>
golang 指针实践
查看>>
Android JNI 代码自动生成
查看>>
elemetui中好用的小技巧
查看>>
Laravel 文件上传提示 “The file "" deos not exits ” ,但确实已经上传了文件
查看>>
4.4 -4.5
查看>>
一天一个知识点 - 浅谈 JavaScript 原型链
查看>>
【变态需求】bootstrapTable列排序-选择正序倒序不排序
查看>>
Interface实现Fragment之间的通讯
查看>>
基于Vue+Canvas移动端的简单水印制作
查看>>
微信小游戏学习笔记 - 使用three.js 绘制一个旋转的三角形
查看>>
charles之localhost、127.0.0.1抓不到包的问题
查看>>
一些git实用技巧
查看>>
关于flutter APP更新相关部分内容
查看>>