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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?1 X: X0 r9 K2 y6 l3 z! W
Void UPP_TASK(Void)" A: z) V5 K8 P( s4 |
{7 V* a1 j' n) _6 o
, a3 @& w6 x( X) y5 W  ?; E' |
    int i,j,k,target_int_count=2;8 g) F1 L) x8 D6 p6 J% o2 M+ e$ P, z
    char ch[2];2 L  V! |0 C0 j- d1 a

( v$ P' J8 H7 u& n) ^) w$ @( s2 S9 Z. \$ b
2 P) ^- x0 m. x% g* O8 E& V/ ]. |1 z
    upp_interrupt_count  = 0;3 x2 B4 a; \" K, l
    upp_error_count = 0;& H# W2 I& S4 Q" ~+ N% j6 B
( `' x9 W: |' Z( A- r. w
    UARTPuts("\tResetting uPP buffers...\r\n",-2);8 [: u5 |5 w. r7 K% T4 K
    // Initialize data buffers
: |. t1 C! t' Z/ f. q. l, T3 i    for (i = 0; i < upp_frame_size; i++)
$ d" y; f& I. l    {9 B" i# s9 ^0 g$ i1 C
       upp_buffer_b =i;. x! v$ p0 a1 G' u7 H
       upp_buffer_a = 0xDEAD;
2 \- t. \2 y& k6 m+ z: ^8 ]    }
( ]' n* g9 |: Y* a1 a$ D: J8 s. J
& @9 _0 X, F- ~: ~4 w    //for(i=0;i<1024;i++)0 H% h% }1 M3 v
    //    temp=0;) X3 ?7 I) p8 n& t$ h) l  E  \
2 ~2 ]6 u9 x' U/ U
    //UPPReset();9 [) h* H0 Z6 D8 F8 e& Y6 [% I
    /*启动UPP DMA传输*/
7 i3 o4 E7 d* I) s. C' T* Y* Q    UARTPuts("upp_prog_dma_i\n",-2);
# ~( P) g: r5 \8 ~    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;: |9 Q; Z% ^8 g4 U, e3 U7 h# i! j
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. K9 P3 H* p0 C7 b  e, L$ ^" Z    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 \: [$ W+ G4 l
1 i: h* L: |" q    UARTPuts("upp_prog_dma_i\n",-2);, P0 l2 C! J% E0 ]6 r; \: _: w4 e
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 Q/ v& I7 n! d1 w6 J    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! u9 x; U- T5 }, O0 A5 U
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 g1 m7 k/ N$ P
( L9 m  L1 ?2 w  S    /*等待UPP传输完毕*/4 p, g" s+ s. I; f9 B3 V/ b
    //i=0;. `; l2 y7 S/ E( E4 G& n
    //j=0;
6 c  C5 @, A" B' k  v( \- n    while (upp_interrupt_count < target_int_count && upp_error_count == 0)5 h" W! v8 V8 O
    {
- N' H! U! G1 I, S        /*  测试UPP传输的同时操作普通DDR数据5 Y: |% D5 x) `" W
        temp=i;# s$ \, p0 Z* ?/ M: x# j$ O0 F
        i++;
  [3 p. p, }2 f, `        if(i==1024)' O0 ~- W' j! ~9 p5 w: W* I+ g: s3 v
        {
4 V( @; f9 Z, z- Q6 v/ q2 u            i=0;
/ R3 H+ F7 V& N5 ?9 l! C! B4 Z            j++;
9 C( ^0 X- d! @' N4 h2 ]7 A, {        }
# O& k8 X, \* h( r* y        */& V8 \3 \2 ~6 D# F0 n

: b/ T* @/ Q2 y5 Z. I- i       asm(" nop");( U& ^  I# I# [: w: U
2 o( [4 n5 D2 B6 k" j
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- U" v9 C6 S5 e! F8 O2 K    }& Z1 v: ^& ]1 G; K6 z/ w/ i, R
5 @9 A. K3 z0 q
    /*检查UPP传输的数据是否正确 (loopback modes only)*/2 u( B6 c& A; M
    //UARTprintf( "i=%d\n",i);" l6 Z# b3 V# `3 t8 f
    //UARTprintf( "j=%d\n",j);# ?0 F2 d& P3 f% z, d$ r: [, W: _  V
    UARTPuts("Data mismatch in buffers.\n",-2);
8 \2 }9 I3 `  _7 q* n8 z9 T    if (upp_interrupt_count == 2 && upp_error_count == 0)& o# v# V: B6 [6 @& f% W1 [
    {! [1 n. w  \% o5 j- c/ K2 x* q8 u
        for (i = 0; i<upp_frame_size; i++)
# u% T4 d! K+ H3 L8 q        {, p& s% K' K/ ?' j8 o) Z. f! a# Z
            if (upp_buffer_a != upp_buffer_b); a, F! @! Q2 N  t6 i$ W
            {
( }0 S( f; p8 P, W' e                upp_error_count++;
' T5 R, F0 f! a2 y/ A            }; M$ w. S! c/ _7 T- G) B+ b0 S
        }
1 j4 X$ n3 D2 X- S' X/ P    }
* {* l( x- f+ y$ x( X" |4 Y% ]9 A3 ^% U+ S
    /* 报告通信结果*/+ j, m4 n& x  @: @7 P2 J1 Q  A
    if(upp_error_count != 0)
; w& s" b" S* S8 t; L7 p        UARTprintf( "upp_error_count=%d\n",upp_error_count);
" j) H, Z7 K' ^7 ?    else
9 ?2 T- M0 D4 f) u        UARTPuts("uPP transfers complete!\n",-2);
* c8 _* z" V) L7 q; q) {
; D& Q/ R: A% S1 s7 H    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- N$ v$ f2 E2 G1 o7 B, t1 ~    UARTGets(ch,2);
9 }' r, `$ F: p  Z: P    UARTPuts("\n", -2);4 I0 W6 ?; e9 f6 J/ J
4 }+ `9 n1 x8 }6 y4 |& [# S
    if(ch[0] == 'y')
/ |4 F1 K- P, D8 L4 A( ]    {
/ K6 N5 T: G! f        /*打印全部读到的数据*/7 D6 q. R6 Y( X: S4 V
        for(i=0; i<upp_frame_size; )# m$ `" k3 P: d8 `1 A+ F
        {5 O& Y- F" B( Z3 I9 u
            for(j=0; j<5; j++): M9 A: i! W2 s
            {
" @/ N2 I/ }' {& i; c+ S5 h                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
( N8 t5 _. K' _. g9 S# \                i++;
: }, v( m, U0 e( T1 @% P% Z                //if(i >= 4096)# k  T. d2 F7 C& [' W$ B" |( v
                //    break;
2 _: K) B9 _' K, p' L' _% |+ M
9 \/ v6 V1 t) G8 u( o! {! R$ I4 F1 I            }
( B0 i3 B6 H8 G+ x7 @            UARTPuts("\n",-2);
2 n" O; j7 q0 h# z% N, N        }
4 {/ G! m+ X7 t8 d. h& a    }
( q! N: I3 A) E. s# L2 @' v2 U8 V) t' J& V# n5 _4 L: o* }
}
/ |7 `. a/ b; G" z( O/ H* @
4 l( e2 z  A9 R; l  g* Z( A
) t; }2 [0 [% t) v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
4 x9 i6 |' d  a! V
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。+ O" I9 N* u# u" c; V/ g# I
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 07:52 , Processed in 0.037618 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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