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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' T2 ~& U& L9 k( W+ S/ s' J
Void UPP_TASK(Void)
8 S. w. |5 v# x' G9 h4 u: ]{+ y" X4 B6 V3 s* L8 q
7 U' y" @# I! `/ x
    int i,j,k,target_int_count=2;
$ E  ]# @. f  J) O$ E    char ch[2];' |* J" \. O+ g

5 n, v; G: u' x, }: Q5 o3 l/ k: z7 a  L7 q7 o6 O6 m. Y5 p! m5 R

( o8 y' m& N2 o6 G0 Q    upp_interrupt_count  = 0;& v, u* u& A8 I4 Z, U  T4 G8 g& p/ F
    upp_error_count = 0;2 U3 z6 ]; A5 n1 I

9 H+ J7 o1 J6 P4 N; v4 ]    UARTPuts("\tResetting uPP buffers...\r\n",-2);+ c+ [! p" R* P& t; g/ z' W) f
    // Initialize data buffers1 n- `# _! S, n' M" |  a8 C
    for (i = 0; i < upp_frame_size; i++)) P1 G$ @. T# _" h/ p& O
    {. L) R# C* C$ Z7 v& v5 J( h% L
       upp_buffer_b =i;, o' m/ ]. b; ], `
       upp_buffer_a = 0xDEAD;8 u5 B% B: [- [
    }
' @4 q3 o' G& ~1 S0 [% W+ J7 ]
# }0 k* c" t/ M" N* \7 N    //for(i=0;i<1024;i++)$ G7 d$ V, d/ s1 a5 P6 e. ?
    //    temp=0;
; g# j$ I* P0 v* [, g+ N4 @6 `* {! |% q) j: A5 ]) g
    //UPPReset();
( k, y5 M* Z9 [( J3 @- C    /*启动UPP DMA传输*/  L; X- c5 ?# U* M/ h, B
    UARTPuts("upp_prog_dma_i\n",-2);; n* L& b9 T9 W& [6 ?0 }1 f
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;" X/ d& y8 A8 u& S$ p; X9 L$ y
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);$ K# {- x. {8 p+ P3 _0 ]+ _" F3 `8 i
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 {, ~& D. H" f; h+ m4 y
" @: }, J+ j3 ]* x    UARTPuts("upp_prog_dma_i\n",-2);8 C: D6 ?0 d+ R$ T' G3 V' i
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, s* t9 @0 K% r2 _' _( a    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- z; b( ~( u( [
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);+ _8 W+ ~" Y$ P7 K. r4 I

! p" f! }. g+ F" g( L4 L    /*等待UPP传输完毕*/
, q# V8 p! M4 u# a7 u    //i=0;
" X  v8 V7 k0 l, _- N* P    //j=0;$ W$ _8 U) t4 Q! ^" i
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)8 z0 Y3 ^6 o$ b* Y. |* u
    {
3 D& B1 l' D& q& t        /*  测试UPP传输的同时操作普通DDR数据
. x" X3 M& p/ H# J        temp=i;# [: F# K' |( }7 Y0 t2 B! H3 F
        i++;
8 q! m- z4 A7 y        if(i==1024)
) B, @4 I0 T' j/ L9 Y4 U/ }- K        {: z  B' S" r3 Y( W6 [" G
            i=0;, K3 I# `0 i& j) c
            j++;* ^, j# Y7 x3 t6 b4 h5 b
        }9 `. ~9 L; q- ]9 K
        */" ]7 p0 }: t1 |/ S7 h; T; r0 r% ^/ [

$ c/ D* f( O: C9 x+ j0 [3 Y  H) S4 y       asm(" nop");7 J3 h5 g" Z+ h6 `4 I$ g! [' ^
* A2 _4 @7 M% p6 o: g+ O
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ }5 X  c1 L6 j    }) f9 m! I2 p; o1 l
( f6 ~( ]% v" ^7 ?0 M" A4 D9 H
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
6 H% d9 O3 X! p0 G5 e0 y    //UARTprintf( "i=%d\n",i);0 P& c1 l' Y/ ~/ t! t3 g( k
    //UARTprintf( "j=%d\n",j);6 t& @! W$ m* b" e8 \+ b. r6 M
    UARTPuts("Data mismatch in buffers.\n",-2);% F* |: c( W. {& ~* T: g6 U
    if (upp_interrupt_count == 2 && upp_error_count == 0)+ o% z/ @5 ~) X3 C& C, {& K3 O2 m$ e
    {) r* d& [. e. z! q- ~
        for (i = 0; i<upp_frame_size; i++)0 z+ |. T- h! ?
        {
/ G2 ^' l& u# K0 v, b2 A* v            if (upp_buffer_a != upp_buffer_b). d  P! Y8 E7 G3 V% K
            {
/ L3 k3 u9 L3 u/ S+ J' p. Q                upp_error_count++;, b6 u+ Z. x5 L( P0 K' Q
            }% i: k% S2 E: @5 T. w" [. A4 O) a
        }
9 I) t" z: p) _" Y4 Q4 v# M    }
6 a, j  b% x' f: M) s) @3 z) L% g8 c, B) g
    /* 报告通信结果*/
( W/ {: m( a2 l, j: w) a& X    if(upp_error_count != 0)$ O6 G- {8 ~$ A1 D
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ N; v' B" V3 @  z    else( T# L" U- d' _2 r4 i; e* H0 M
        UARTPuts("uPP transfers complete!\n",-2);& d" m1 O3 J5 Y; f- D* }% I1 k, Z
. Y2 p: W0 s% A# a9 }. L
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
" @7 t# W. e+ I9 Z( k0 Y; q$ Z0 \    UARTGets(ch,2);. U  H7 y1 K5 a$ a, e. ^' b& g: v
    UARTPuts("\n", -2);# k) w" j9 Z' R. F* y, t; y
/ b+ b; O) T6 Q* t3 }8 ~
    if(ch[0] == 'y')
9 x. H5 x1 q# v    {' x/ J" R; k- V
        /*打印全部读到的数据*// b7 Q' s! R9 F& b) r- L# B
        for(i=0; i<upp_frame_size; )" j/ L8 l: y  k' B) X- u4 I& V
        {
3 j% ?1 A! W/ W3 d$ u            for(j=0; j<5; j++)
: v9 ^" x* F% I5 u/ R7 j            {: z7 y4 X. D( V/ U
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);3 C# ], D" K. G; z7 K2 l( x$ L0 O
                i++;
" L7 i# f0 }+ l2 m$ `8 t3 y, d9 z9 d                //if(i >= 4096)
; z  f; Q/ _5 y- Z/ S& \# t4 j                //    break;$ j! p' M2 E5 ^+ U

4 Z; _9 [3 O- j9 D            }
, z7 y8 O$ M% g9 Q$ _" |            UARTPuts("\n",-2);
5 J- ~4 l, j4 ], u+ Q9 }& V8 T        }/ [' n8 \( n: F* ~0 r
    }4 [4 s9 B: H' c; _& d9 |

- d" p( O& V9 x" G+ b$ U}
7 o) D# R# s# W$ Q
6 f' Q4 b  z, K( t
: x, p; M4 ?* j, {/ e! |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。* u2 x4 q; ?$ ~' S
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。% w5 t1 L4 \# ^0 s; q) X
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-28 06:00 , Processed in 0.039150 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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