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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* v9 g8 t1 x$ u! l, L
Void UPP_TASK(Void)
9 h+ X9 w  s; \. ^{
! ]( \8 K9 U  u$ w+ [- A# M- m; R6 [' P) M# I, W/ ~
    int i,j,k,target_int_count=2;
- a# X: h- p, a& u6 N9 z" R( C% k; r    char ch[2];
' f6 R( n, ]( {- u/ t  k3 e# @/ C& f% T6 F

% _  d* p+ Z# M& q2 j% D4 v$ s  {* m+ p) f
    upp_interrupt_count  = 0;
7 a; @' N) G% I: w  Z9 p, [    upp_error_count = 0;3 G$ E' [; ^$ @& ?& t: O+ V
0 n" {8 I* N/ T0 B6 O1 x' A
    UARTPuts("\tResetting uPP buffers...\r\n",-2);( l% Y; |7 T) Z6 L
    // Initialize data buffers4 G  v1 ^9 b4 N4 ?8 B7 b7 i
    for (i = 0; i < upp_frame_size; i++)
3 U/ s7 ?( E( P% H3 g) C, o    {' i2 C( }" b3 a; H
       upp_buffer_b =i;3 ]: M  S3 `4 f+ c) e3 f
       upp_buffer_a = 0xDEAD;7 ?. ?( l1 H. |  Q  t* T
    }
0 q, h, N9 m4 ^  H$ a% n# K8 T* J' g5 ?  `' p1 R& X
    //for(i=0;i<1024;i++)
; f+ b% e9 B) G    //    temp=0;
0 q, S% J7 j8 h- C# I
* H$ A8 Z- u3 Q    //UPPReset();
/ K3 r- c+ g9 v    /*启动UPP DMA传输*/
- l& ~' ]! h. M/ z* m    UARTPuts("upp_prog_dma_i\n",-2);& Q- v& ~8 v. A9 e# y8 K. A0 ~
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 u$ }6 A. ?3 s
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% z3 c% c+ l1 P/ W5 ?" `    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 F1 a: I5 T5 ^, A6 g
+ O4 c2 O3 Q( v. V    UARTPuts("upp_prog_dma_i\n",-2);4 Y) @# L* \( w3 ?2 Y9 b' ]
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ P2 I2 z1 a/ K, D( ]7 w    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! Y5 @) `& w; [0 h8 j6 x4 `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);6 l/ H3 W. ~. g# M  k
; N# T5 Z" R, W$ e& ^' o0 _( V6 q
    /*等待UPP传输完毕*/1 k8 m4 V! ^9 c" f( Q
    //i=0;' Y5 A4 ^! i( ^0 ^+ h$ b; M) f
    //j=0;7 g/ l* B; j( K& k3 }
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)9 a& p6 J* M! u
    {
- A& u+ c9 B, H. n4 N+ ^        /*  测试UPP传输的同时操作普通DDR数据4 a- H" }. u9 [  s# M: [" `
        temp=i;
. G' o) o  U+ \/ M. g' ]4 f& b$ z2 E        i++;1 r# s7 n' c* S6 z
        if(i==1024)
8 v( I8 p0 i/ Z$ k& d6 b        {
4 S7 D1 ^, _, L' i7 z+ ^# G            i=0;9 j8 x5 a7 D# s% h4 k  ?- \
            j++;6 d# I5 I1 {* @; `
        }
# j4 ?( N, u/ H0 h3 ^' u        */5 b# V6 `" y7 ~* v
4 E( z5 u3 Y4 _# E4 M2 `9 N4 Y
       asm(" nop");8 ]6 L- G& u  p8 f1 u9 V' M1 \, {% E
% u1 S- Q3 H& u! t3 u( {
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);' x  v6 l" m# R- y
    }
6 k1 E) N9 w  Q4 Z+ \$ F6 d" w0 t/ s: m7 i
    /*检查UPP传输的数据是否正确 (loopback modes only)*/# R! j. l0 R2 w& |! j& x# ~
    //UARTprintf( "i=%d\n",i);
. {$ l/ U0 @5 Z; m/ g+ l' u    //UARTprintf( "j=%d\n",j);4 J9 {  w8 I" z3 j1 j
    UARTPuts("Data mismatch in buffers.\n",-2);4 _. @# w- v; u3 ?
    if (upp_interrupt_count == 2 && upp_error_count == 0)
  O1 i% G/ q5 O3 w    {8 ]# I& K3 ~# L# S
        for (i = 0; i<upp_frame_size; i++)
# `  V. X! m4 ^; n        {
0 V5 f( o! J/ S5 p: ?9 f            if (upp_buffer_a != upp_buffer_b)" x4 N; r/ j+ }" b
            {9 u9 a5 F2 Z4 c( [3 k
                upp_error_count++;
9 f) U4 R/ Z) _2 P" F5 g6 ?            }/ Q' l  k. q" P# v* `# A
        }
* @+ s1 c( V$ y6 `    }
# H$ j( k# n6 B% @. x
: J4 k4 `: h! ^6 A/ N    /* 报告通信结果*/
; B  Y; S& k, d$ V    if(upp_error_count != 0)
8 R1 F! V5 Y7 H5 W: H- U* c; _0 B        UARTprintf( "upp_error_count=%d\n",upp_error_count);) }5 M& K- u5 X  ^3 A
    else4 v' E) [# S1 y1 v4 e
        UARTPuts("uPP transfers complete!\n",-2);
6 P, Y- b2 A/ Z' `+ Q: {2 M# ]) n1 K* B; B
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
9 i4 w& n- V/ }. ]6 }    UARTGets(ch,2);
9 V. q, t+ w( {+ M/ k2 @$ A    UARTPuts("\n", -2);
2 x+ r- P* `8 U& W  q
' Y. J  l' O+ i6 p    if(ch[0] == 'y')
5 Z$ i, W5 V* v* ~3 \9 |! U8 g+ O    {$ P, Q! c" t" j; W- ?( d+ [& B
        /*打印全部读到的数据*/
" b( z9 n& E% t! O. n* e% |; @        for(i=0; i<upp_frame_size; )
9 O& Q" W" y* `/ H# o        {
9 E" Q: W" @) u5 |' L            for(j=0; j<5; j++)
. {8 l2 H# d/ R+ M% ]            {
7 x7 \' b$ R' x. C" c3 F1 g                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
- e. N6 m8 V3 ?; u0 \                i++;
) p( b+ D3 Y0 N$ p$ s                //if(i >= 4096)
, K$ N& C) G) s4 h1 E                //    break;. v( O% m( \6 I' e
# q6 w' U+ C# [* J9 _& `5 O1 d
            }1 x) w1 W8 E! z1 x6 |  D
            UARTPuts("\n",-2);
$ E5 u/ [& T% T' Z) {" f7 Z        }
. C/ ?! |* M( |9 A    }
7 Z" e! N( I7 N2 e1 h4 i: G! |/ i% B8 @
}

4 N* G) h# H% e2 Y1 o
2 m- ~( ?) H  E) T- a6 u

: P0 t) b/ e& c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。  |, r, m3 W7 g4 d# M- ]; }& q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
: e8 }2 O1 a$ D. g1 |
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 05:53 , Processed in 0.042707 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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