upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! B8 ^) V' L& U1 r0 z
Void UPP_TASK(Void)
' F3 z. u! \. ]# B" {$ M# Y! y; i6 a* P{# w, f8 B4 p) q8 W$ X& n& t9 ]

+ F. N6 J+ N2 h/ r- N4 s    int i,j,k,target_int_count=2;# m: {, y1 c) |9 H5 C0 ]
    char ch[2];
( q& i5 J4 e# s3 p: f8 \# E  a) n( o% V  N0 P: |6 _* |9 K0 e8 }

9 g7 @( w( i: J
: y+ @* ?/ _0 a/ F8 b8 `7 d9 Y    upp_interrupt_count  = 0;
: i  p, @* y" {1 F# }    upp_error_count = 0;0 Y! P! c" G& H
7 X9 R4 l( c0 c6 _
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* v, q$ G- m; O/ F% D
    // Initialize data buffers* f! c' u/ K* B2 Q) Y8 g8 X2 x' |
    for (i = 0; i < upp_frame_size; i++)7 W0 [: V) q! v2 a
    {  ]8 G( f& h5 B$ I
       upp_buffer_b =i;$ ?4 E: v* G( v! {, Q
       upp_buffer_a = 0xDEAD;
  E4 _6 O$ T1 y; C. x( O, c8 t    }& f$ u5 i* A0 v6 }: E

. A1 T) Y$ l+ ]5 |    //for(i=0;i<1024;i++)
1 {" W7 m2 @8 z" |: A3 T+ d    //    temp=0;. M7 K2 |2 Z/ E: q, e# d! h
1 s. g% f* [/ ]6 h
    //UPPReset();
# L6 \; @' P8 ]0 z    /*启动UPP DMA传输*/
, C. Y) L9 }) Y; A    UARTPuts("upp_prog_dma_i\n",-2);
7 b% |& f, Q- W. G; B, f    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 Y/ J! F1 w6 h9 ^% j$ j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" M1 `0 P' y1 [0 e0 |" a$ B
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 F& B& T+ Z% ~, ]$ ^" c, A
! e4 N# S7 M& [: r    UARTPuts("upp_prog_dma_i\n",-2);% f6 a9 m+ m' ]. |6 i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# b+ k* b0 w; U4 k9 q8 x% z
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' b) i9 O. h5 `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: X8 Q9 R* w6 J) G1 c& b% y: i% E, L7 Z! D* b0 v, `6 p
    /*等待UPP传输完毕*/
" Q9 D0 A! U) q6 `    //i=0;
6 G5 a8 ?! F% d    //j=0;
: g- i4 A% G$ ]# N2 a$ `2 V    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# c' e% p. N- V1 A( t# j    {! V+ e: C+ w% D. T- J; A6 ^- f
        /*  测试UPP传输的同时操作普通DDR数据  J# Q- N1 {6 s  \) N
        temp=i;1 n+ K+ k" Q4 @  T7 b
        i++;: e  l) Z3 u0 S. J
        if(i==1024)) @# r- ~# Z! g6 [0 z2 u
        {" e1 d: x4 n+ |: ~1 E* X
            i=0;' |$ Z# W/ h/ J
            j++;
! ~* p! T9 ?& V0 Z9 u, |( ~. r        }5 J; L3 v/ R! C0 A& p
        */
  |& D4 d; H- U3 N* R
$ I' J5 p! W' m" w4 D) T1 i. G- E) }       asm(" nop");; R6 `" z$ e) Z/ ^

! @. f7 E% @5 Q9 }       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' M  S8 L. d2 o& p  D    }
$ v0 l2 y1 i0 `9 y( q
: E6 D# _7 l7 _    /*检查UPP传输的数据是否正确 (loopback modes only)*/3 I3 u. |- c$ E" [, [# C
    //UARTprintf( "i=%d\n",i);
( Y: l) \9 z0 E. l- Q/ N; {) a    //UARTprintf( "j=%d\n",j);+ r. z+ G6 d0 V/ e4 E+ c; Z# t" Q
    UARTPuts("Data mismatch in buffers.\n",-2);% R" k0 B: y6 Z7 p7 E- B" s  C
    if (upp_interrupt_count == 2 && upp_error_count == 0)
% }% g7 p# `$ K0 H) L' z: c    {9 N2 v" v) i4 U7 `& ^1 v5 Y5 U
        for (i = 0; i<upp_frame_size; i++)" j: d3 B  l; C/ P0 D( P
        {1 |4 M8 B' D% I4 L, [
            if (upp_buffer_a != upp_buffer_b)
$ `. d$ @% @$ J  M9 w. w            {( W' K1 @/ y* v$ J6 [9 W% G/ s
                upp_error_count++;+ a+ H. a$ j& A) F4 s! e
            }
/ r3 {9 @7 c5 f        }
" E( ]! B5 B" p; u2 \    }8 t# X5 W: n. W' t6 ~
. N; ^) R3 g( S$ Z7 }: r6 {
    /* 报告通信结果*/5 c0 s: ~/ o, Y
    if(upp_error_count != 0)
5 R/ \5 s8 V9 A; P! h, m, s        UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ @0 }5 }) T5 d; ^    else
9 K# a6 P/ R; W( d! ]2 h        UARTPuts("uPP transfers complete!\n",-2);/ u+ _. G( V  k
" m! W% _, b" T3 }. [% F
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
/ ?# _+ ~2 T) L, F    UARTGets(ch,2);
2 a$ ]. K2 O  ]3 r) }% S5 c2 K    UARTPuts("\n", -2);4 R( v% K3 ~# h: m9 |
3 J, W$ o3 h' i1 p0 A& E* _$ X
    if(ch[0] == 'y')
7 u2 }0 C; K" ^3 p' ?/ n4 h    {, L4 M; t, o" o! V! f
        /*打印全部读到的数据*/+ I- ]0 V3 ~, t3 H" i
        for(i=0; i<upp_frame_size; )
; A* t$ c5 }! \& I: v  ]" d        {6 V( H0 o: W5 ?. s
            for(j=0; j<5; j++)6 i* w0 L7 _& [2 q3 ~8 S. G' r5 \3 r
            {
" r5 H# K$ F0 E# w/ w; m1 S* n                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
5 v' m' L6 m% \2 g  ]$ Y4 C$ G                i++;
$ H. N4 N; _: A5 u+ S( L7 ^0 @                //if(i >= 4096)
  B1 Z6 c6 \; }( x6 V                //    break;
  q# l3 J  G0 d9 @
* r, ~  W. E% ?: D: c7 i% r& E            }' j; z: j( s  e" X
            UARTPuts("\n",-2);
2 S+ L2 b& n8 {4 A        }) {& p$ Q! `" [% t) A; g; y
    }
5 P% z% j0 P6 B# e. U5 h3 ^
7 J* `& a, q6 T/ ^* I}
+ J  b% b; k/ }+ g  O

2 `" V% n/ a* l; O4 ?, \6 T- N, _, O1 z! }, t: d' G6 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。* |/ s8 C, i' u+ o- t
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 y' c  K4 L8 p6 D4 p  Z
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-15 17:00 , Processed in 0.050512 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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