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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 |, c* y* O5 f: ^" P
Void UPP_TASK(Void)
+ c9 B0 A5 q: o( C9 ?0 b: X- v; M+ h" J{
, o! J4 }! y9 g* e% z5 C: p
: Y4 H, a: n& y: T    int i,j,k,target_int_count=2;
2 n, I! t' H# e3 C; c    char ch[2];( p+ d# f: i4 \' J; Y9 Y' D6 i9 c
9 M# q% s% a4 M; B7 Y) I- I
5 O! Y/ x. t" F9 w
# Y4 H$ g  p" ?7 [  d5 ?8 \
    upp_interrupt_count  = 0;
- u2 @' B* C1 j2 H" i! Y    upp_error_count = 0;" ~' I, S( m; m- U, v! j  Y
$ s/ A. {; M, {2 c# ]$ f
    UARTPuts("\tResetting uPP buffers...\r\n",-2);- t" {3 @* r1 g0 e& `: k( Z
    // Initialize data buffers
% f' N* l, U$ j5 i- I    for (i = 0; i < upp_frame_size; i++)+ ~7 E, N/ q! ]. b  E
    {( a2 f0 u) K" d# |6 f
       upp_buffer_b =i;
& }; f6 c: w- n' C3 g$ T7 P       upp_buffer_a = 0xDEAD;5 Z* e9 v. }7 n4 i3 ^0 j  a
    }2 J, R6 A& `0 ?5 `  |& @! b3 W

5 z( r9 K  v5 b5 D7 b0 L    //for(i=0;i<1024;i++)
7 e# a' P( T) _2 x/ X    //    temp=0;8 g, z8 f0 q6 x2 j6 _

  N* @4 [. ~0 K& _# J( E    //UPPReset();  G2 l3 i! s2 h
    /*启动UPP DMA传输*/
! _+ V* _* W; |    UARTPuts("upp_prog_dma_i\n",-2);; n8 ^* J& S4 ]
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. u, z( E5 H0 W" d5 l    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 h: ^$ o7 m7 }  u1 s    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);" H" i, ]7 A7 U+ z* g3 J
- E. O, z5 q2 e' t
    UARTPuts("upp_prog_dma_i\n",-2);
) N, u6 P5 T& M! {! F; m" o    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ R( k5 z- u9 e( M9 s/ o7 `" R+ n' ~; P    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);5 b& x. |4 h) h- u: d' c
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);( f8 Q/ K6 X4 z& N8 F% h% F/ b1 r0 F

4 a$ `) Z, O! H    /*等待UPP传输完毕*/
# O- _7 [" m/ P7 `5 ?9 x) F8 H. y    //i=0;
3 ^9 ]0 I; S( c+ q1 I$ ~* Q    //j=0;$ W4 |5 b2 ^8 c! k9 }' m  R. {
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; s/ S- Q9 h5 m- G2 s* V+ H; T    {
3 y6 t- i3 l  h& c        /*  测试UPP传输的同时操作普通DDR数据
, i- b! j8 k6 t9 q' u8 ^) l' A. P% u        temp=i;
0 {( _! r: t8 M6 S+ Y. @        i++;
% u5 L! \8 l1 M! u        if(i==1024)
! v9 L5 r" U4 }# s/ G3 Z! Y        {7 `+ H; h) j# [7 B
            i=0;
% ~- G8 g+ E4 X' O* R: Y            j++;
) |" B2 ^5 b2 e' \8 \; s        }  \" \$ K" G' f$ b: e1 z7 k% b
        */
' H) g7 Y6 K. j
/ A' q3 X+ I' w6 v% ^: s       asm(" nop");
+ U+ x1 A+ r/ h3 u3 D8 o; r' u5 r0 h. h" G
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* R( ]1 n2 V( P  M2 l    }
% R/ ]6 S0 D7 L' ~
& D5 k4 w4 a+ ?& m  H4 t# T9 I    /*检查UPP传输的数据是否正确 (loopback modes only)*/
& ]+ _2 Z- U( x' J    //UARTprintf( "i=%d\n",i);
5 Q) I/ g: V0 B    //UARTprintf( "j=%d\n",j);1 |3 `+ Y6 \; l
    UARTPuts("Data mismatch in buffers.\n",-2);7 c1 x9 u1 B* V/ e) ~' I: K, p9 |
    if (upp_interrupt_count == 2 && upp_error_count == 0)
  v8 W+ g" ]* [- v5 w. I! K+ @* m    {: t. ?2 s! M2 r- c/ M( ]+ N
        for (i = 0; i<upp_frame_size; i++), k% v: W2 Q) P. \. u' K
        {2 J/ D0 A1 N% x3 ]
            if (upp_buffer_a != upp_buffer_b)/ A1 `* U( t( P+ t
            {
- k: w( L  j" D! }6 D                upp_error_count++;6 @3 g1 j- R6 V6 |
            }
! r3 w/ O9 k; _# i# z' R. K        }
/ F) Y* J1 j7 J" H    }
3 C) I# u. e2 |& \# ^6 w  q# e; P' h1 N5 s5 c
    /* 报告通信结果*/
( I( N9 a, |9 Z& c7 q4 `    if(upp_error_count != 0)
  b! c2 S# A* w" w6 ~        UARTprintf( "upp_error_count=%d\n",upp_error_count);
, Y/ Y7 T4 {& S# G    else
8 {; J  m  G! e9 J% @8 E        UARTPuts("uPP transfers complete!\n",-2);
0 s$ {- S, f7 I1 ?- s! a; O4 c# y7 a4 [: E% f. M/ D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);$ V  ]5 G/ X$ \. ~3 u- L
    UARTGets(ch,2);
5 u1 ^! @. Z# v7 P    UARTPuts("\n", -2);
& l" D/ V" H: h/ s  V* V
  n# S2 D2 H6 X* U$ Y    if(ch[0] == 'y')
" u7 G3 v4 ~( z+ u% x0 H& d& l    {
  c/ W% y7 [: n( @# |9 g% B        /*打印全部读到的数据*/: i9 C+ x4 |' G  u( K! _" g4 |
        for(i=0; i<upp_frame_size; )
( H6 f% j! H/ \$ F3 t9 x; F        {3 I2 o! k% G: d$ c3 O3 X
            for(j=0; j<5; j++)
% V1 q9 z3 U' M. X* b6 k            {
- Z1 |2 S* O: Z5 z8 B# b* D! d                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);$ f# F) m5 m. Q7 S/ t, U
                i++;
; Y* I' B. u% O  _                //if(i >= 4096)
8 i  r+ R1 L5 p/ H4 g  E1 p/ c                //    break;/ X8 j% w1 \6 q/ r" `# c: L

( X& C& V% \& s: \            }
. L; L, a5 I5 O7 @: n# Z+ T! n            UARTPuts("\n",-2);
6 Q6 k0 G8 @0 p- {        }
- e$ M7 d  e/ h, E    }$ q; Q8 S4 K- T3 A9 w3 R: G

, i$ A3 x( W/ t' d% F/ C7 l, ~}

' [; p) X- K& z
8 N2 Q3 M( A2 K) L
: W6 |( E% L& e' X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
% q' j1 V. l3 H2 K% n0 a
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。4 _7 d; u- M' X
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 15:58 , Processed in 0.040430 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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