Nios II在线调试失败,JTAG UART?

Nios II在线调试失败,JTAG UART?,第1张

1. 检查硬件吵喊有没有问题

2. 检查NIOS的CPU设置,包括程序的中断地址设置,,9,

saDfhwaehh 举报

硬件没有问题啊,别人也用那个板子做测试呢!~CPU应该也没问题,不然使用片上的ram会出错的!有人说就是下载线的问题,要正规的那种,但是为什么使用片上ram就好着呢,也能调试和烧写flash!~~~

举报 gankeeper

会不会你的fmax不够?片上的fmax一般比外部ram的高。你可以测试一下你的sdram,不用nios,直接用硬件编写一个写和读的测试程序,看在你需要的fmax下能否正确读写。 还有sdram的驱动设置是否正确 不好意思,晚了几天。我对sdram很不了解啊,不过板子上的SDRAM正好是nios手册中用来做例子计算相移的那个sdram芯片,也就是MT48LC4M32B2,所以我在sopc builder中直接就选了这个,什么都不用改的。那个计算的相移是-3.35ns,不知前辈还有何高见?还有那个SDRAM的测试。。。能再说清楚一些吗?使用vhdl语言编写吗?~~,Nios II在线调试失败,JTAG UART

JTAG UART

UART,JTAG

NIOS调试JTAG UART.提示如下橘念.没有任何输出.

nios2-terminal:Warning:The JTAG cable you are using is not supported for Nios

nios2-terminal:II systems.You may experience intermittent JTAG munication

nios2-terminal:failures with this cable.Please use a USB Blaster revision B

nios2-terminal:cable or another supported cable.Please refer to the file

nios2-terminal:errata.txt included in the Nios II development kit documents

nios2-terminal:directory for more information.

nios2-terminal:(Use the IDE stop button or Ctrl-C to terminate)

并且进入DEBUG之后也不是很正常.单不执行.设置断点等 *** 作不好使

我知道有很多人问这个问题,但是没有一个准确的答案!我就是试一个流水灯的程序,有epcs和sdram,sdram不知道有没有问题,我使用一升伍野个片上的ram完全没问题,也可以在线调试,但是换成sdram就是这样了,

汇编编写的模拟串口通信程序

T2作为波特率控制

UART_RXD 是硬中断0或1口,如果能进入中断,说明该线有一个起始位产生,进入中断后调

用下面的接收程序。退出硬中断之前还需要将硬高镇中断标志重新复位。

UART_TXD 是任何其它IO即可。

UART_SEND:

PUSH IE

PUSH DPH

PUSH DPL

PUSH PSW

PUSH 00H

PUSH ACC

CLR EA

SETB UART_TXDSTART BIT

MOV R0,A

CLR TR2TR2置1,计数器2启动,时间计数启动。

MOV A,RCAP2L计数器2重新装载值

MOV TL2,A置计数器2初顷念扒值 T2需要重新装雀昌载

MOV A,DPH

MOV A,RCAP2H

MOV TH2,A

MOV A,R0

SETB TR2TR2置1,计数器

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

CLR UART_TXDSTART BIT

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

MOV R0,#08H

UART_SEND_LOOP:

RRC A

MOV UART_TXD,C8 BIT

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

DJNZ R0,UART_SEND_LOOP

SETB UART_TXDEND BIT

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF2

POP ACC

POP 00H

POP PSW

POP DPL

POP DPH

POP IE

RET

UART_REC:

PUSH IE

PUSH DPH

PUSH DPL

CLR EA

CLR TR2TR2置1,计数器2启动,时间计数启动。

MOV A,RCAP2L计数器2重新装载值

MOV TL2,A置计数器2初值 T2需要重新装载

MOV A,DPH

MOV A,RCAP2H

MOV TH2,A

JB UART_RXD,$REC

SETB TR2TR2置1,计数器2启动,时间计数启动。

JNB TF2,$

CLR TF20.5 BIT

JNB TF2,$

CLR TF21 BIT

JNB TF2,$

CLR TF21.5 BIT

MOV C,UART_RXD

MOV ACC.0,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF22.5

MOV C,UART_RXD

MOV ACC.1,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF23.5

MOV C,UART_RXD

MOV ACC.2,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF24.5

MOV C,UART_RXD

MOV ACC.3,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF25.5

MOV C,UART_RXD

MOV ACC.4,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF26.5

MOV C,UART_RXD

MOV ACC.5,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF27.5

MOV C,UART_RXD

MOV ACC.6,C

JNB TF2,$

CLR TF2

JNB TF2,$

CLR TF28.5

MOV C,UART_RXD

MOV ACC.7,C

JNB TF2,$

CLR TF29.5

JNB UART_RXD,$等待停止位,并重新复位计数器

SETB UART_RXD

POP DPL

POP DPH

POP IE

RET

补充回答:

串口调试

1. 发送:向总线上发命令

2. 接收:从总线接收命令,并分析是地址还是数据。

3. 定时发送:从内存中取数并向主机发送.

经过调试,以上功能基本实现,可以通过上位机对单片机进行实时控制。

程序如下:

//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收

//和查询发送,发送没有必要用中断,因为程序的开销是一样的

#include <reg51.h>

#include<stdio.h>

#include <string.h>

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN]

unsigned char checksum,count3 , flag,temp,ch

bit read_flag=0

sbit cp=P1^1

sbit DIR=P1^2

int i

unsigned int xdata *RAMDATA/*定义RAM地址指针*/

unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66}

void init_serialcomm(void)

{

SCON=0x50 //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00

ES=1

TMOD=0x21 //定时器工作于方式2,自动装载方式

TH0=(65536-1000)%256

TL0=(65536-1000)/256

TL1=0xfd

TH1=0xfd

ET0=1

TR0=1

TR1=1

// TI=0

EA=1

// TI=1

RAMDATA=0x1F45

}

void serial () interrupt 4 using 3

{

if(RI)

{ RI=0

ch=SBUF

TI=1 //置SBUF空

switch(ch)

{

case 0x01 :printf("A") TI=0break

case 0x02 :printf("B") TI=0break

case 0x03 :printf("C") TI=0break

case 0x04 :printf("D") TI=0break

default :printf("fg") TI=0break

}

}

}

//向串口发送一个字符

void timer0() interrupt 1 using 3{

// char i

flag++

TH0=0x00

TL0=0x00

if(flag==10)

{// cp=!cp

// for(i=0i<6i++)

P2=0x25

TI=1

temp=*RAMDATA

printf("%c",temp)

TI=0

// RAMDATA--

flag=0

}

}

//主程序

main()

{

init_serialcomm() //初始化串口

//向6264中送数据

{

*RAMDATA=0x33

}

while(1)

{

*RAMDATA=0x33

}

}

调试需要注意的问题:

1. 发送过程:在发送时必须保证TI=1:即发送缓冲器为空,否则将导致数据发不出去,如果想强制发送可以用:TI=1.具体发送数据:利用printf(“abcd”)函数直接发送即可。

2. 接收过程:在接收时多选用中断方式,这样可以节约CPU的时间,提高效率,


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12460705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存