老曦子博客

记录我学习生活的小博客(FPGA/SOPC)

[Nios]Debug时出现execution is suspended because of error

execution is suspended because of error错误的中文意思就是“由于出现错误,程序暂停执行”

[Nios]可恶的nios2debug.cpp、nios2oci.cpp、m_state == STATE_DEBUG错误

通过USB Blaster下载时发生的错误,无法Debug。 google了好多,结果似乎并不多,看来遇到这个问题的同学很少,在niosforum与alteraforum上大多回答都是说是USB Blaster的问题。换了几个USB Blaster可是问题依旧。 Altera的帮助文档上面也有相关解决方法,可是没有用哎。

我的第一个UCOS-II程序

其实是修改的例子程序,不是我的。

不过第一次在UCOS-II上面跑程序,还是比较激动的,发出来大家看看撒~

#include <stdio.h>
#include "includes.h"
#include "system.h"
#include<io.h>

/* Definition of Task Stacks */
#define   TASK_STACKSIZE       2048
OS_STK    task1_stk[TASK_STACKSIZE];
OS_STK    task2_stk[TASK_STACKSIZE];

/* Definition of Task Priorities */

#define TASK1_PRIORITY      1
#define TASK2_PRIORITY      2

/* Prints "Hello World" and sleeps for three seconds */
void task1(void* pdata)
{
  while (1)
  {
    IOWR(PIO_BASE,0,0x5);
    OSTimeDlyHMSM(0, 0, 3, 0);
    IOWR(PIO_BASE,0,0xa);
    OSTimeDlyHMSM(0, 0, 3, 0);
  }
}
/* Prints "Hello World" and sleeps for three seconds */
void task2(void* pdata)
{
  while (1)
  {
    printf("Hello from task2\n");
    OSTimeDlyHMSM(0, 0, 8, 0);
  }
}
/* The main function creates two task and starts multi-tasking */
int main(void)
{
  /*
    OSTaskCreateExt(task2,
                  NULL,
                  (void *)&task2_stk[TASK_STACKSIZE],
                  TASK2_PRIORITY,
                  TASK2_PRIORITY,
                  task2_stk,
                  TASK_STACKSIZE,
                  NULL,
                  0);
  */
  OSTaskCreateExt(task1,
                  NULL,
                  (void *)&task1_stk[TASK_STACKSIZE],
                  TASK1_PRIORITY,
                  TASK1_PRIORITY,
                  task1_stk,
                  TASK_STACKSIZE,
                  NULL,
                  0);

  OSStart();
  return 0;
}

[FPGA][SOPC]Nios最简单的Avalon总线例子(点灯)

首先要制作组件,估计下面这个程序是最简单的了。

代码如下:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity alontest is
port
(
clk  : in std_logic;
en  : in std_logic;
indata: in std_logic_vector(7 downto 0);
outdata: out std_logic_vector(7 downto 0)
);
end alontest;

architecture one of alontest is

begin
process(clk)
begin
if en = '1' then
outdata<=indata;
else
outdata<="00000000";
end if;
end process;
end one;

在SOPC里面设置好接口,继续添加cpu和一个片上的memory即可。够简单吧~

组件cpu完成之后,在Quartus分配好相应管脚,跑一下。下载到目标板。

下面是在Nios里面的代码:

#include "system.h"
#include  <io.h>
#include "alt_types.h"

int main (void) __attribute__ ((weak, alias ("alt_main")));

int alt_main (void)
{
while(1)
{
       IOWR(ALONTEST_INST_BASE, 1, 0xff);
}

return 0;
}

 

这就是传说中的一句话电灯吗?哈哈。。。 。。。

Nios II成功移植μC/OS-II系统

完全是按照模板做的,还好一次成功了。

下面是SOPC Builder的核:

未命名

Nios II Run了之后成功的出现下面的信息:

Task2 received the message: 19 in mailbox 2
Task2 incremented the message and placed it into mailbox 3

Task3 received the message: 20 in mailbox 3
Task3 incremented the message and placed it into mailbox 1

Task1 received the message: 21 in mailbox 1
Task1 incremented the message and placed it into mailbox 2

系统时钟直接连接SDRAM的CLK

错误信息如下:

Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Pausing target processor: not responding.
Resetting and trying again: OK
Initializing CPU cache (if present)
OK

Downloading 02000000 ( 0%)
Downloaded 53KB in 0.8s (66.2KB/s)

Verifying 02000000 ( 0%)
Verify failed between address 0x2000000 and 0x200D3FF
Leaving target processor paused

 

这个不成功的原因应该就是相位问题了,既然PLL不工作,就想别的办法了。

另外,真OO无双在博客里面提到过“Leaving target processor paused”这个错误,他也提到了解决办法,我想他的这个问题不适合我目前的情况哎。

真OO无双地址:http://www.cnblogs.com/oomusou/archive/2007/12/01/979534.html

他的版本太老了,嘿嘿。

[FPGA][SOPC]Nios II第一例子“Hello from Nios II!”

Nios II的“Hello World!”

 

#include "sys/alt_stdio.h"

int main()
{
  alt_putstr("Hello from Nios II!\n");

  /* Event loop never exits. */
  while (1);

  return 0;
}

 

SOPC只需要最简单的配置,加上cpu,加上onchip_mem,还有就是不要忘记加上jtag_uart。

[SOPC][NiosⅡ]定时器软件编程模型

对于NiosⅡ处理器用户,Altera提供HAL系统库驱动程序,可利用HAL API 函数访问定时器。Altera 提供的驱动程序已集成到HAL系统库,代替访问定时器寄存器,用户应尽可能地通过HAL API 访问定时器。Altera提供一个驱动程序来驱动2个HAL定时器设备模型:系统时钟定时器和时间戳定时器。

说说Nios Ⅱ的JTAG UART核

具有Avalon接口的JTAG UART核是在PC主机和FPGA上的SOPC Builder系统间进行串行通信的一种实现方式。JTAG UART核在许多设计中用来替代RS-232完成与PC主机的字符输入/输出。JTAG UART核提供了一个简单的寄存器映像的Avalon接口,该接口对软件开发人员是透明的,主外设通过读/写控制和数据寄存器与JTAG UART核通信。

JTAG UART核使用FPGA内嵌的JTAG电路,PC机通过FPGA上的JTAG专用引脚对核进行访问,且通过JTAG下载电缆与FPGA连接,例如USB-Blaster电缆。Altera提供JTAG的软件支持。对于Nios Ⅱ处理器,HAL系统库中包含该核设备的驱动程序,允许使用ANSI C标准库stdio.h访问JTAG UART核。对PC主机,Altera提供JTAG终端软件来管理PC机与目标系统的连接;对JTAG数据流解码和在屏幕上显示字符。

JTAG UART核是SOPC Builder内部集成的模块,很容易集成到SOPC Builder创建的系统中。

分页:[«]1[»]

Powered By Z-Blog 1.8 Spirit Build 80722

Laoxizi's Blog FPGA/SOPC 文章转载请联系作者