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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# `. q" n% K9 X6 S6 U
Void UPP_TASK(Void)
6 z+ K2 i# Q9 S3 g  x) E{
. n1 V* w  R% D& v+ v. D; h" E7 a1 f
2 y" i. |' D* M& M2 T* t+ o' ?    int i,j,k,target_int_count=2;) H! d8 l% t6 |# p
    char ch[2];
7 |$ E! L7 G* E/ E2 J' t4 j( t8 |% G% ^& A: u% O5 M/ R0 y3 w1 [

. S7 x4 e' O$ C/ m3 u0 G5 }- o9 X4 R  \1 j- c
    upp_interrupt_count  = 0;4 G) d& g0 ~9 ~# \8 W- j: y# N
    upp_error_count = 0;
: Q1 L# L% A$ `. `: F4 i3 ^6 _# W" m, ]1 @. J5 o3 N' l; E
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* n* j& f  |& ~6 ~+ K6 Y9 O: e
    // Initialize data buffers
& l; L! Z+ i! c# f- S. t; `2 r4 h    for (i = 0; i < upp_frame_size; i++)
) c" z4 S8 o4 Y' D& I$ P    {8 n3 v7 U- y* |0 u/ @
       upp_buffer_b =i;7 O/ t" f8 k5 t" t
       upp_buffer_a = 0xDEAD;3 V2 \% r. F9 s) {
    }0 L- ^. v) d4 T9 }

, j$ U, H7 B+ p+ N% P2 Y* c    //for(i=0;i<1024;i++)  E- e+ [  c  A0 z+ i6 q: T9 ?# W
    //    temp=0;+ V$ w1 Z; S+ @5 }8 {( U" D; z

0 v0 ~. J  R0 w; L; C    //UPPReset();/ y( Z1 }( K; g' U9 E
    /*启动UPP DMA传输*/
: j9 u8 D8 Z: ]0 `" L: d    UARTPuts("upp_prog_dma_i\n",-2);
3 V, D) E9 I$ _+ Y3 j# l9 u, x    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: L: N0 s- o6 O" L# J2 L    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);/ s+ U. h3 k8 D% \* H+ D% |0 `
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);4 b7 q0 z) a6 s7 ~
4 J: W3 t4 g1 o. D
    UARTPuts("upp_prog_dma_i\n",-2);6 R8 g9 m: k# a2 i  X  `
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; W; q4 m5 g, v' N1 L    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);8 P' K6 [2 r0 Q, K: A) ?6 D( B
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);* `; ~5 o+ z8 H1 @

" \4 p) h( F' s" d    /*等待UPP传输完毕*/
3 s' R" G- i2 |% \, `    //i=0;) {0 M) U5 G7 u
    //j=0;; U+ w3 ~. v2 Q3 ~8 `
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
  W) O( u* M/ u3 x' C7 G    {# H* n5 L/ ^7 }' ?
        /*  测试UPP传输的同时操作普通DDR数据
( `$ g, @. b( R        temp=i;
6 s" n7 J% r, e/ j. ^        i++;
3 q/ l0 q; \; |; s8 ^8 q        if(i==1024)4 v9 ]0 H' [. B0 @
        {
9 e$ F8 T$ D0 ~+ D' ~            i=0;
: U' Z0 L1 c7 K  ~            j++;6 A, K2 a: p" Q
        }
7 e  t- b- J8 S* ~2 D' n/ B        */
) m2 N; |- z$ L" `* W. T6 O
& h- W% i  S1 a       asm(" nop");
( q; o# K8 p! a: \/ A- }
+ u3 ~" R) H2 p+ C0 Y+ O       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' o) V' p4 {' C1 o. V$ `
    }. q0 D6 K' Y; }, w2 D

+ n) s& W4 q) Q# m) Q# ?) w    /*检查UPP传输的数据是否正确 (loopback modes only)*/  _) U8 m& W9 Z# s! `. P
    //UARTprintf( "i=%d\n",i);6 Q1 M) D* l7 s. s
    //UARTprintf( "j=%d\n",j);+ q" b: a- l7 X: `8 i0 I9 F9 Z
    UARTPuts("Data mismatch in buffers.\n",-2);3 Q! _6 `; P" |* U
    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 ]6 D5 M! {$ @    {; T) S4 }! |$ E3 X; f
        for (i = 0; i<upp_frame_size; i++)
6 k1 Y& \/ r. n+ K3 `4 v0 Y; {& p8 x        {$ N* [/ i4 e/ x: \0 f
            if (upp_buffer_a != upp_buffer_b)4 j6 q8 d) @: y; [9 N9 C% s
            {5 x4 E! x  o5 g& t
                upp_error_count++;1 J9 w6 T; z6 R  F( i. @/ O" q9 x
            }& @9 N4 d$ x$ Y7 e0 D- W( e$ R
        }/ n. L; O- d$ L. I. H7 X
    }! U0 I. c1 ^3 p7 |

/ U+ I/ [+ M( d( ^$ R    /* 报告通信结果*/
3 t, C- A: M4 U7 n    if(upp_error_count != 0); m! Z5 P& A7 c6 k5 k/ k
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
; l) F& H% }% w# c7 u) Z& V    else4 f- l$ y& N8 k% l! y
        UARTPuts("uPP transfers complete!\n",-2);
, B/ v% X" W0 b- `9 K$ h: D, ~! o- g; }; g& D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 t! s- Q- z0 F+ W" y1 O) O2 ]
    UARTGets(ch,2);$ }, u# l7 Z( s) V5 M) M
    UARTPuts("\n", -2);& s9 f+ k  F8 ^, Q3 m! w
/ }8 P5 Y  r5 j* @: v: d, }
    if(ch[0] == 'y')
* P: ?. E: \( V# W+ n    {' D* Q, [0 {9 R" w( a
        /*打印全部读到的数据*/# D; }- @% I1 O3 \
        for(i=0; i<upp_frame_size; )$ T3 L0 Y. s+ k) ?* w
        {& G- W2 f' e+ Q2 G# d+ D3 I& \
            for(j=0; j<5; j++)% n8 R; {* W+ ]! V& e
            {
% c8 M: E5 T. F) H                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( |$ L# i4 y5 i; K- A. z( A
                i++;
0 i! w4 v) v1 T                //if(i >= 4096)7 x& T0 [. _. l3 M2 r8 s; R
                //    break;# W  s% v, r( I7 t; i

2 B3 d  p6 B# Q/ Z            }# F0 E; `2 Y) ]9 t6 V( ^; F. `" R
            UARTPuts("\n",-2);; l" }) [; }' z, b8 e, Q9 U
        }
6 m6 w1 q: u( H4 y3 r3 X$ K8 _    }3 r6 r- S, t' C3 i9 f3 ^# J2 j. N
& |8 K1 e* v3 R8 I. h+ _
}
7 t  l6 v& I2 s1 N; n3 }5 Y- j

2 _0 M) R* q% \
# S+ ]# i+ O7 t+ Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。5 I; g3 r3 j6 }1 E3 q* V3 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
1 g! l0 V1 P+ q2 E1 N1 m, d4 L
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 22:24 , Processed in 0.038878 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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