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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 \5 s+ J/ J, Z) P0 R
Void UPP_TASK(Void)
% H! f3 j; v* X: P4 ~; w{* r/ m: _* k! m' d- p) o
1 K0 o6 y$ ~- z- f3 n8 j$ p
    int i,j,k,target_int_count=2;
" `9 l/ T5 T* ~5 D/ F4 s    char ch[2];
/ c* f( ^5 B! U
$ r/ R1 W, e$ o0 C; Y& ^* @8 V! l# K3 B, A' y+ ?$ C+ a! `/ m1 P# x* }
+ G2 g, ]! Y0 u* q
    upp_interrupt_count  = 0;# N# g- r, n( y! d0 y
    upp_error_count = 0;
) U" M, l" P) r( T1 H& D1 K; f% g8 F) m) D2 s* ^5 j
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
& C& i% E" P& R    // Initialize data buffers# A; e! J$ Z  Z$ F4 A3 l
    for (i = 0; i < upp_frame_size; i++)
7 T9 k; q# {% J. a6 H. A    {& Y# z' e& v) p8 U6 E
       upp_buffer_b =i;
* T: V7 ]) L1 i0 [3 I: E, X( l, Q       upp_buffer_a = 0xDEAD;
& l2 x5 i+ R8 o1 _& Y: A) L/ m    }, t. [; F8 p/ A. x" J* x

+ c1 w7 Y' C- B, n( W) V    //for(i=0;i<1024;i++)! G; O" W  Q( g* h8 ^" Q/ `1 z' w
    //    temp=0;& `0 N. r" e. }
' d! |5 [7 x* }' d5 f6 p: R
    //UPPReset();
) O4 ?1 x* c/ q/ Y( O+ |2 h    /*启动UPP DMA传输*/, q2 o; Z- [, Q4 j+ J1 g
    UARTPuts("upp_prog_dma_i\n",-2);
% Y# C: J4 R$ D) w1 A  m5 [    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;, p/ i0 x) `+ t, [
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 W: b# ]5 X) l8 u( B    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);6 b$ I7 o% `( ]  k+ B
. O/ @9 L# f) \0 D  D; o
    UARTPuts("upp_prog_dma_i\n",-2);  j+ Q* |5 E. e
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& T" r% _, c. c$ p, L
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);. g$ y# L* m' v' Z' F4 S6 `
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" H6 O6 E6 c6 r* p
6 |9 t. b8 k* b. \% b( K3 B+ v    /*等待UPP传输完毕*/3 ~' o  F7 H! r3 L
    //i=0;8 n. A- z0 p$ O- t2 `% k. a! B& B3 O
    //j=0;0 d& ?) j# a% a
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* _: E( W1 p7 t9 m3 O/ g' J" h6 v2 Z4 q! w    {; }* |, e; [2 Q& G" [( b) O4 W
        /*  测试UPP传输的同时操作普通DDR数据
6 ]0 P; ~, E- ^  O5 B9 z( ]        temp=i;7 F7 s; G0 ~9 v1 z2 `9 B2 G! ^
        i++;3 h& M5 V+ M6 D" c: w. R
        if(i==1024)9 `) T; p# B3 E8 W5 ?
        {
, c" J8 v0 o0 j# \$ K/ n/ i/ \            i=0;
$ J6 p7 z; a/ R4 R: D            j++;
9 t0 v/ @' W; J4 W, |4 n: `        }
( R9 ^3 F! j) a0 K2 R8 C        */. ^+ `. S9 s. G& R2 y
; R9 ^0 J8 l# |0 e8 g. p' O
       asm(" nop");
: S+ W. T0 F2 _) j" C8 j$ a& A" P4 O& P2 W) S; [, Y$ @/ L
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);! c# y# q5 ^1 J! N0 v
    }# g# D4 u  @" p/ l3 _9 @. [% _8 k! g

3 l* B" X% i$ F3 ?    /*检查UPP传输的数据是否正确 (loopback modes only)*/  b$ R  |1 P5 C! W$ a
    //UARTprintf( "i=%d\n",i);" u! j5 A) S; s/ ^3 `! H' @
    //UARTprintf( "j=%d\n",j);) C2 c6 ?7 P9 s8 u1 f
    UARTPuts("Data mismatch in buffers.\n",-2);9 B; H& {) ~, k" s
    if (upp_interrupt_count == 2 && upp_error_count == 0)
0 ], d$ `4 [5 k4 p* y. I! X+ g    {
6 d1 R- H+ P; `* S) ^! ?) T        for (i = 0; i<upp_frame_size; i++)) z+ H' a* [1 L: U3 ?, j, _( G0 ~
        {( B1 Q( K: G6 C' j
            if (upp_buffer_a != upp_buffer_b), g  I+ M, |* i4 s
            {
7 u( Y3 g- Z. K  B                upp_error_count++;. A* Z0 Y0 G. J4 }7 f4 ]
            }0 s) f. N* d# x) Z
        }& t% G$ C( h  @) T
    }" V! ~1 t; v& @9 }; ?1 J
4 D9 R+ k0 p% P+ F2 `9 @# p# @
    /* 报告通信结果*/) Q3 Y% W" ^& I: B. F1 r" x
    if(upp_error_count != 0)
) m  x( N8 M/ d& r/ a' t        UARTprintf( "upp_error_count=%d\n",upp_error_count);) G. p& b! @4 |4 Z. Z8 I; v& K
    else, n" @: B/ r; Y7 t9 f
        UARTPuts("uPP transfers complete!\n",-2);
  ]( }1 W6 _# a, L' ]
7 D* Z: G1 ~! Z/ ^& [% U' h    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
) V5 u- j( r% B, e8 f( u    UARTGets(ch,2);
# D8 f+ B+ J) \. Z    UARTPuts("\n", -2);  t( M) @6 Y3 u

( Q3 w3 D* p" l! n    if(ch[0] == 'y')0 g: w6 C6 r: ^* C% v
    {7 I; T3 h' c5 [/ H( W, K6 h
        /*打印全部读到的数据*/% ], e- x3 S2 X3 C
        for(i=0; i<upp_frame_size; ), H, G' }- T9 W1 F% }. i
        {. f* m1 \* H1 G' `- V8 {0 s
            for(j=0; j<5; j++)6 |2 F$ Y# t- T
            {% Q9 o" D- W8 d" _% j% H& o
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
% z! p% {0 ^1 \& i2 C- `8 [                i++;
5 Z" G8 n' q: v- n3 E                //if(i >= 4096)
. w7 T: v' i6 h  J1 i( w                //    break;2 y9 a* c- x8 K6 u8 O/ [& L5 G. _( ]

, [7 v, H; j3 K4 O0 D) @: I6 M            }
3 i3 C& N0 ?0 M            UARTPuts("\n",-2);
  U) x) }! _/ O6 j0 ~        }$ u/ a9 [3 H& r1 v
    }
1 u& b. j2 H$ i8 o; n" Y2 W6 _3 w: ~! z2 t% k6 o
}

$ `# K* T- j4 X( V; X( N; d
! n, k; E% y7 N9 \

- ?2 ?' C/ l4 z5 D; r( _  @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。$ q3 H, q! [- L, P
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( B# |; k3 w( s/ [. S4 b$ I- Z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 06:52 , Processed in 0.036580 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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