|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
最近在做“官方的6个实验”,在实验5中遇到了问题。
硬件添加了GPIO(4bit),UART,中断,定时器,遇到了一些问题,向大家请教一下。
1.下面这段程序进不去中断,请高手们看看。#include "xparameters.h"
#include "xuartlite.h"
#include "stdio.h"
#include "xutil.h"
#include "xbasic_types.h"
#include "xgpio.h"
#include "xgpio_l.h"
#include "xintc_l.h"
#include "xstatus.h"
#include "xtmrctr_l.h"
#define LED_DELAY 100
#define LED_CHANNEL 1
XGpio GpioOutPut;
Xuint16 count =1;
Xuint16 one_second_flag =0;
void timer_int_handler(void *baseaddr_p)
{
/*Add variable declarations here*/
unsigned int csr;
/*Read timer 0 CSR to see if it raised the interrupt*/
csr=XTmrCtr_mGetControlStatusReg(XPAR_DELAY_DEVICE_ID,0);
/*if the interrupt occured, then counter++*/
if (csr & XTC_CSR_INT_OCCURED_MASK)
count++;
one_second_flag =1;
//Display the count on the LEDs and print some statement
XGpio_mSetDataReg(XPAR_GENERIC_GPIO_BASEADDR,LED_CHANNEL,count);
xil_printf("count = %x\n\r",count);
// Clear the timer interrupt
XTmrCtr_mSetControlStatusReg(XPAR_DELAY_BASEADDR,0,csr);
}
int main(void)
{
xil_printf("-- Entering main() --\r\n");
Xuint16 count_mod_3 =0;
/* initialize and set the direction of the GPIO connected to */
XGpio_Initialize(&GpioOutPut,XPAR_GENERIC_GPIO_DEVICE_ID);
XGpio_SetDataDirection(&GpioOutPut, 1, 0x0);
/*start the interrupt controller */
XIntc_mMasterEnable(XPAR_XPS_INTC_0_BASEADDR);
XIntc_mEnableIntr(XPAR_XPS_INTC_0_BASEADDR,0x1);
xil_printf("The value of count =%d\r\n",count);
while(1)
{
if (one_second_flag)
{
count_mod_3 = count %3;
if (count_mod_3= 0)
xil_printf("Interrupt taken at %d seconds \n\r",count);
one_second_flag=0;
xil_printf(".");
}
}
print("-- Exiting main() --\r\n");
}
2.由于进不去中断,我很怀疑定时器是否工作。所以我用了以下的语句:
unsigned int csr,TCSR,TLR,TCR;
csr=XTmrCtr_mGetControlStatusReg(XPAR_DELAY_DEVICE_ID,0);
TCSR=XTimerCtr_mReadReg(XPAR_XPS_INTC_0_BASEADDR,0,XTC_TCSR_OFFSET);
TLR=XTimerCtr_mReadReg(XPAR_XPS_INTC_0_BASEADDR,0,XTC_TLR_OFFSET);
TCR=XTimerCtr_mReadReg(XPAR_XPS_INTC_0_BASEADDR,0,XTC_TCR_OFFSET);
结果用debug设置断点,得到数据:csr=0xb8080050;TCSR=0x0;TCR=0x1;TLR=0x0;
我有点疑问:csr和TCSR得到的不应该是同一个值么?这两个语句观察的不是同一个寄存器么?
3.我用debug的时候,点击Resume,然后点击suspend,出现如下情况(Exceptions occurred attempting to suspend):
而设置断点就没有问题。怎么解决?
4.看网上的教材,能看到memory,而在我的Xilinx ise suit 11.1中只能看到register,能看memory么? |
|