|
7#
楼主 |
发表于 2016-9-24 20:51:42
|
只看该作者
请问下面这段UPP接收FPGA发来数据的代码,为什么一直进入不了窗口中断,也就是upp_interrupt_count的值一直为0。
- /****************************************************************************/
- /* */
- /* uPP通信 A 通道接收 */
- /* */
- /* 2015年06月24日 */
- /* */
- /****************************************************************************/
- #include <stdio.h>
- #include <c6x.h>
- #include <math.h>
- #include "hw_types.h" // 宏命令
- #include "hw_syscfg0_C6748.h" // 系统配置模块寄存器
- #include "soc_C6748.h" // DSP C6748 外设寄存器
- #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明
- #include "interrupt.h" // DSP C6748 中断相关应用程序接口函数声明及系统事件号定义
- #include "uartStdio.h" // 串口标准输入输出终端函数声明
- #include "upp.h"
- #include "dspcache.h"
- /****************************************************************************/
- /* */
- /* 宏定义 */
- /* */
- /****************************************************************************/
- // 使用缓存
- //配置 DMA
- #define upp_line_size (20)
- #define upp_line_count (20)
- #define upp_frame_size (upp_line_size * upp_line_count)
- #define upp_line_offset (upp_line_size)
- /****************************************************************************/
- /* */
- /* 全局变量 */
- /* */
- /****************************************************************************/
- //全局变量
- volatile int upp_interrupt_count = 0;
- volatile int upp_error_count = 0;
- //接收缓存变量
- signed short data[upp_frame_size/2];
- uPPDMAConfig transposeParA;
- /****************************************************************************/
- /* */
- /* 函数声明 */
- /* */
- /****************************************************************************/
- void InterruptInit(void);
- void uPPIntRegister(unsigned int cpuINT );
- void uPPIntSetUp(void);
- void uPPIsr(void);
- static void Delay(volatile unsigned int count);
- /****************************************************************************/
- /* */
- /* 中断服务函数 */
- /* */
- /****************************************************************************/
- void uPPIsr(void)
- {
- unsigned int intr_dmai_status;
- intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);
- while (intr_dmai_status != 0)
- {
- if (intr_dmai_status & uPP_INT_EOL)
- {
- uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOL);
- }
- // 窗口接收完成
- if (intr_dmai_status & uPP_INT_EOW)
- {
- uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW);
- upp_interrupt_count++;
- }
- if (intr_dmai_status & uPP_INT_ERR)
- {
- uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_ERR);
- upp_error_count++;
- }
- if (intr_dmai_status & uPP_INT_UOR)
- {
- uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_UOR);
- upp_error_count++;
- }
- if (intr_dmai_status & uPP_INT_DPE)
- {
- uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_DPE);
- upp_error_count++;
- }
- // make sure all interrupts are handled
- intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);
- }
- // finally: write 0 to EOI register
- uPPEndOfInt(SOC_UPP_0_REGS);
- }
- /****************************************************************************/
- /* */
- /* uPP注册中断 */
- /* */
- /****************************************************************************/
- void uPPIntRegister(unsigned int cpuINT )
- {
- IntRegister(cpuINT, uPPIsr);
- IntEventMap(cpuINT, SYS_INT_UPP_INT);
- IntEnable(cpuINT);
- }
- /****************************************************************************/
- /* */
- /* 初始化uPP */
- /* */
- /****************************************************************************/
- void OmaplFpgauPPSetup(void)
- {
- PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UPP, PSC_POWERDOMAIN_ALWAYS_ON,
- PSC_MDCTL_NEXT_ENABLE);
- // 引脚复用配置
- uPPPinMuxSetup(uPP_CHA_8BIT);
- // uPP复位
- uPPReset(SOC_UPP_0_REGS);
- // 数据格式配置
- uPPDataFmtConfig(SOC_UPP_0_REGS, uPP_CHA, uPP_DataPackingFmt_LJZE | uPP_DataPacking_FULL
- | uPP_InterfaceWidth_8BIT | uPP_DataRate_SINGLE);
- // 通道配置
- uPPChannelConfig(SOC_UPP_0_REGS, uPP_DDRDEMUX_DISABLE | uPP_SDRTXIL_DISABLE | uPP_CHN_ONE
- | uPP_ALL_RECEIVE);
- // 引脚配置
- uPPPinConfig(SOC_UPP_0_REGS, uPP_CHA, uPP_PIN_TRIS | uPP_PIN_WAIT | uPP_PIN_ENABLE | uPP_PIN_START);
- // 时钟配置
- uPPClkConfig(SOC_UPP_0_REGS, uPP_CHB, 57000000, 228000000, uPP_PIN_PHASE_NORMAL);
- // 中断使能
- uPPIntEnable(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW);
- // 中断映射
- IntRegister(C674X_MASK_INT5, uPPIsr);//DSP可屏蔽中断5
- IntEventMap(C674X_MASK_INT5, SYS_INT_UPP_INT);//将UPP中断映射到cpu中断
- IntEnable(C674X_MASK_INT5);//使能UPP外设
- // uPP使能
- uPPEnable(SOC_UPP_0_REGS);
- }
- /****************************************************************************/
- /* */
- /* DSP 中断初始化 */
- /* */
- /****************************************************************************/
- void InterruptInit(void)
- {
- // 初始化 DSP 中断控制器
- IntDSPINTCInit();
- // 使能 DSP 全局中断
- IntGlobalEnable();
- }
- /****************************************************************************/
- /* */
- /* 主函数 */
- /* */
- /****************************************************************************/
- void main(void)
- {
- int i,j;
- char ch[2];
-
- /* 初始化串口终端 使用串口2*/
- UARTStdioInit();
- UARTprintf( "\r\n" );
- UARTprintf( "=================================================\r\n" );
- UARTprintf( "=== uPP A Receive Demo : Start\r\n" );
- UARTprintf( "=================================================\r\n" );
- // DSP 中断初始化
- InterruptInit();
- // uPP 初始化
- OmaplFpgauPPSetup();
- UARTprintf ("\tStarting uPP transfers...\r\n");
- // A通道参数 接收
- transposeParA.WindowAddress = (unsigned int *)((int)data);
- transposeParA.LineCount = upp_line_count;
- transposeParA.ByteCount = (upp_line_size*sizeof(signed short )) ;
- transposeParA.LineOffsetAddress = (upp_line_offset*sizeof(signed short));
- while(1)
- {
-
- upp_error_count = 0;
- upp_interrupt_count = 0;
- //通道A启动传输
- uPPDMATransfer(SOC_UPP_0_REGS, uPP_DMA_CHI, &transposeParA);
-
- //等待upp传输完毕
- while (upp_interrupt_count == 0 && upp_error_count == 0)
- {
- Delay(0x0ff);
- i++;
- if(i == 50)
- {
- UARTprintf( "ERROR : UPP timeout occurred, aborting transfer ...\r\n" );
- break;
- }
- }
- UARTPuts("\tDo you want to print all the data?(y/n)",-2);
- UARTGets(ch,2);
- UARTPuts("\n", -2);
- /*打印全部读到的数据*/
- if(ch[0] == 'y')
- {
- for(i=0; i<upp_frame_size/2;i++ )
- {
- for(j=1; j<=3; j++)
- {
- UARTprintf("data[%d]=%d ",i,data[i]);
- if(i >= upp_frame_size/2)
- break;
- }
- UARTPuts("\n",-2);
- }
- }
- UARTPuts("\n",-2);
- UARTPuts("\n",-2);
- UARTPuts("\n",-2);
- UARTPuts("\n",-2);
- UARTPuts("\n",-2);
- UARTPuts("\n",-2);
- }
- }
- /****************************************************************************/
- /* */
- /* 延时 */
- /* */
- /****************************************************************************/
- static void Delay(volatile unsigned int count)
- {
- while(count--);
- }
复制代码 |
|