V500大程序阅读(8)- Lwip & SD & Timer & 数据处理

IAR软件使用:

https://www.iar.com/zh/knowledge/learn/programming/compiler-optimization-2

1.2 IAR 环境配置及编译_iar linker配置-CSDN博客

 Lwip-undone

代码移植过去,PHY ID、speed协商等都没问题。

但是:

官方:

(后来我才明白。官方给的解决方案是对应于Lwip例程本身就不通的情况)

改了之后发现没有。

忽然明白,官方给的解决方法是对应于Lwip不通。

而测试Lwip已经调通了,只是移植进大程序不通而已。

SD

之前测试的模板导入,成功。

但是后续如果要用SD卡去进行存储和取用的话,需要把example的函数分开写。现在所有的操作都写在一起了。

Timer

用的是:

#define TIMER_DEVICE_ID FPAR_TTCPS_0_DEVICE_ID//TIMERPS_0_DEVICE_ID//XPAR_XSCUTIMER_0_DEVICE_ID
#define TIMER_FREQ 0x34FB5E3//55.555555MHz     0x13DE4355 //333.333333MHz
#define TIMER_IRPT_INTR_ID TIMER0_1_INT_ID//XPAR_SCUTIMER_INTR

导入原来的Timer.c  &  Timer.h,但是函数内容作了修改(根据PeripheralTest中的ttc_example.c

int Timer_Intr_Start(XScuTimer *ScuTimerPtr,XScuGic * IntcInstancePtr,u16 IntrId)
{
	int status;
	//设置优先级和触发方式
	XScuGic_SetPriorityTriggerType(IntcInstancePtr,IntrId,0xA0,0x3);
	//set up the timer interrupt
	status = XScuGic_Connect(IntcInstancePtr, IntrId,(Xil_ExceptionHandler)Timer_IntrHandler,
					(void *)ScuTimerPtr);
	if(status != XST_SUCCESS)
	{
		return status;
	}
	//enable the interrupt for the Timer at GIC
	XScuGic_Enable(IntcInstancePtr, IntrId);
	//使能定时器中断
        FTtcPs_setTimerEnble(ScuTimerPtr, timer1, FMSH_set);        
//	XScuTimer_EnableInterrupt(ScuTimerPtr);
	//启动定时器
//	XScuTimer_Start(ScuTimerPtr);
        FTtcPs_setTimerEnble(ScuTimerPtr, timer1, FMSH_set);
	return XST_SUCCESS;
}

int Timer_Init(XScuTimer *ScuTimerPtr,u32 DeviceID)
{
	int status;
	XScuTimer_Config *configPtr;
	configPtr = XScuTimer_LookupConfig(DeviceID);
        if(!configPtr)
	{
		xil_printf("No Config Found For Timer Device %d\n\r",DeviceID);
		return XST_FAILURE;
	}
        status = FTtcPs_init(ScuTimerPtr, configPtr);   //TRUE = 1
        if(!status)
	{
		xil_printf("Timer Initialization Failed \n\r");
		return XST_FAILURE;
	}
        
//	if(!configPtr)
//	{
//		xil_printf("No Config Found For Timer Device %d\n\r",DeviceID);
//		return XST_FAILURE;
//	}
//	status = XScuTimer_CfgInitialize(ScuTimerPtr,configPtr,configPtr->BaseAddr);
//	if(status != XST_SUCCESS)
//	{
//		xil_printf("Timer Initialization Failed\n\r");
//		return XST_FAILURE;
//	}
//	status = XScuTimer_SelfTest(ScuTimerPtr);
//	if(status != XST_SUCCESS)
//	{
//		xil_printf("Timer SelfTest Failed\n\r");
//		return XST_FAILURE;
//	}
	return XST_SUCCESS;
}

int Timer_Load(XScuTimer *ScuTimerPtr,u32 TimeUs)
{
	int loadvalue = TIMER_FREQ/1000000.0*TimeUs;
	//使能自动装载
        FTtcPs_setTimerEnble(ScuTimerPtr, timer1, FMSH_clear);
        FTtcPs_setTimerMode(ScuTimerPtr, timer1, user_DefinedCount_mode);
//	XScuTimer_EnableAutoReload(ScuTimerPtr);
	//加载计数周期
        FTtcPs_TimerNLoadCount(ScuTimerPtr, timer1,loadvalue);
//	XScuTimer_LoadTimer(ScuTimerPtr,loadvalue);
        FTtcPs_setTIMERPWM(ScuTimerPtr, timer1, FMSH_clear); //PWM mode         0:successful
	return XST_SUCCESS;
}

int Timer_Stop(XScuTimer *ScuTimerPtr)
{
	//停止定时器中断
//	XScuTimer_DisableInterrupt(ScuTimerPtr);
        FTtcPs_ClearTimerNInterrupt(ScuTimerPtr, 1);        
	//停止定时器
//	XScuTimer_Stop(ScuTimerPtr);
        FTtcPs_setTimerEnble(ScuTimerPtr, timer1, FMSH_clear);
	return XST_SUCCESS;
}

中断处理函数

Timer :                        <(^-^)>

QSPI Flash :

UARTPS :                        (;´༎ຶД༎ຶ`)                调了近两周,终于进度到90%了

UART16550:

CAN:                                ʕ.•᷅ࡇ•᷄.ʔ               good

Lwip:                              ໒𖦹ࡇ𖦹 ͛১             目前还没有头绪

问题:

Timer的irq在配置完就会进入,并且只进入一次。

解决方法:

在irqHandler中加入中断清除标志的函数即可。

(其他模块调试内容见其他博文)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值