upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6653|回复: 2
打印 上一主题 下一主题

upp问题,在SYSBIOS下的应用问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?( ^% e* c, ~# q/ [1 ]9 m9 d8 Q$ |3 t
Void UPP_TASK(Void)
. E  D+ _4 a1 c9 ?& ]) ]{6 G4 P1 U4 Z0 L0 G
. R! Z1 k! [7 \" c( ?" B$ {( F$ g. c
    int i,j,k,target_int_count=2;0 r1 v8 k. s. `5 Z1 d5 G
    char ch[2];
: M5 ]5 V0 m, q/ X9 A2 u  v0 ?8 L% `' F1 g
" n. I7 a8 T" i4 v1 K) X

$ [5 G7 [9 ~2 N1 Y2 X. \    upp_interrupt_count  = 0;( k: o8 v7 e: p  h
    upp_error_count = 0;0 ~0 K3 C. h4 K7 i1 d/ I

7 m+ ?4 ?$ m# ]% I: P    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 `. [7 T  M$ O) }, x. B
    // Initialize data buffers
. w  {/ W3 u$ [1 p  s- z2 \    for (i = 0; i < upp_frame_size; i++)1 m. S4 D6 k# N% d& @
    {, e+ {8 R* V  E, _2 a- k+ \6 G) a
       upp_buffer_b =i;
0 D; o+ q, l6 s: @" d, ^6 m       upp_buffer_a = 0xDEAD;
8 ~7 F9 Q3 h- ?8 u8 X    }: E/ x) r  t) a- l  H
# Y; s* {6 B  c4 G5 Z
    //for(i=0;i<1024;i++)
0 _6 \! x* E) e/ O" G# ^    //    temp=0;
, P3 e( z2 z. h! S; v; Q! G3 o+ h% u( a2 V) E! V$ E( W  C
    //UPPReset();
1 W4 R1 |8 Z: _3 n% ?# E( F* R    /*启动UPP DMA传输*/
2 }% |' A& h0 K. {7 C    UARTPuts("upp_prog_dma_i\n",-2);! @  V- l0 p/ ~
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; u" ]* w3 h  C' W$ k    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* x+ o& A% R" l  d$ ~  L! B/ W
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( O  O0 S( E4 p' P% S4 W+ {4 c  w1 R  a- N
    UARTPuts("upp_prog_dma_i\n",-2);) n( T. E1 M4 H/ C0 Y
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ u+ c# {% o9 D1 j    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 O$ |* F+ ^3 E& K
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% i# g" a' e- I0 _( G, Q2 R+ ~# F6 L7 l) H0 a
    /*等待UPP传输完毕*/
5 n; P  `, V. |, d; {    //i=0;
% d4 T! G% z! |# @: H, r9 v    //j=0;8 u1 h* a2 \" o0 b, ]) p& v% u
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# i$ i! a3 z) S: b. B# s    {; ?) ]' q$ |! m$ J8 Q8 k  U; ]
        /*  测试UPP传输的同时操作普通DDR数据7 \" p# V% Q/ n  i$ \
        temp=i;
! B4 \7 z8 V; w        i++;" v# U2 U1 P, L" q' f
        if(i==1024)+ j( b" ]1 x2 o: P# B! Z
        {
) ?5 A' V$ S8 w3 ~# {            i=0;
  o/ p; T- g0 M1 B& _2 M" l            j++;
  U" f/ Z: I- v4 H5 D        }
# I2 U8 ~/ \2 {# G4 i2 E; ]        */
9 M* M0 ]/ b) d' W0 k4 o8 D" C* X# U$ e, F; p- I8 |+ W
       asm(" nop");
0 \- e, s3 k1 b$ `  }0 i1 v: P# b2 G5 j0 [; @$ s2 a0 @) g1 U
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% @* Y1 \- w1 E! m! d1 r
    }% Y  F5 _& S( M3 a4 D
6 v' p* t6 Z  F& w+ G. `7 A6 H6 S8 `
    /*检查UPP传输的数据是否正确 (loopback modes only)*/# `6 H/ K) t) ~4 D
    //UARTprintf( "i=%d\n",i);  }, R1 d1 C- h
    //UARTprintf( "j=%d\n",j);) ?9 w7 F& y3 [2 O5 c/ ]7 }
    UARTPuts("Data mismatch in buffers.\n",-2);
' [2 O1 B8 [8 `    if (upp_interrupt_count == 2 && upp_error_count == 0)
  K2 S2 m5 r5 c6 N* U    {
/ J2 I% y) s) @6 {, x7 w2 r- ^# f        for (i = 0; i<upp_frame_size; i++)# G2 X2 T  ]" {
        {5 p0 W4 d" S$ p5 g: [! L( s5 w
            if (upp_buffer_a != upp_buffer_b)
8 ?& J% s4 L9 \# _4 [            {
" y- {6 g  E9 o- |$ `; A8 j                upp_error_count++;5 N5 ]& }( E& P# t! y9 s
            }
& L/ H: Z4 V2 e! D" {. [        }
' E; V# @# v' R    }, W  U- `  ]/ R' w, M" B

3 s- {# u0 W+ ]/ F    /* 报告通信结果*/# J& S- ~7 D6 K, N
    if(upp_error_count != 0)
0 A/ U; `. B8 _. t        UARTprintf( "upp_error_count=%d\n",upp_error_count);' R' X$ g: L; o, n9 ^3 g
    else3 S7 [% [/ A. y7 C2 Q
        UARTPuts("uPP transfers complete!\n",-2);
4 o( A2 e. I; d) N4 s
! U9 u9 G1 ~. m5 l6 @8 P+ V( P    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 M+ s- A5 X- S! [- J6 }# V
    UARTGets(ch,2);! E  K; c# K# C) M" h  b
    UARTPuts("\n", -2);
% H- `* j. x  j
6 t) A7 ~8 m0 C; M% M$ F$ s6 S0 O6 A    if(ch[0] == 'y')
3 O; R2 {- j' C! k7 P% B    {
! j/ `7 i, }$ h! J) x" k        /*打印全部读到的数据*/  {# E& u' O- N4 i
        for(i=0; i<upp_frame_size; )
: P; f+ K9 @% `        {
4 Q* f( c1 E' `            for(j=0; j<5; j++). f$ {. \3 h! ]8 [' R- F8 H2 y
            {. Q( Z5 U( E' }
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- i) u4 _) J9 m; k- X                i++;
1 r: l9 n% u7 _6 X+ \                //if(i >= 4096)
/ ]8 e' i3 T: ^# y$ \) Y. ]+ _7 H                //    break;$ d1 B% A! `9 T$ `0 j8 E$ b

, |: x% ]3 G+ r) ]8 T7 @2 D7 _) U            }
7 t: H5 T( Q8 w: Q- u# Z/ n            UARTPuts("\n",-2);+ }3 P! m+ x# j9 Z
        }, C" q! r3 m1 V, ~+ q, E' L
    }
1 n: ]) }" M0 F( {' b
, p- Q) f+ e! a  j! g* f' ~$ o}
9 z5 v0 u" d$ v9 a2 i" i3 v
+ L: w# y& M8 h/ g) Y
/ t+ |" j# O& @  o( O5 r6 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
; u8 F# i) M. M% A7 M5 u
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. t: k  v" U/ f( b% b% ~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-11-17 22:53 , Processed in 0.039627 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表