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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ y, [. O# Y' j
Void UPP_TASK(Void)
5 W' q9 r6 }. ^: r' e{
7 z4 a- P, U$ a) b: M+ ]4 s3 u8 r* q3 H( f8 j  |
    int i,j,k,target_int_count=2;) ?5 e; k/ k  b' C( Z  ?
    char ch[2];
: Y9 e) M# W+ V+ N; G8 r& V- k2 B8 `

1 v7 `) B2 ?  g' `, c9 m4 x$ ]1 J' o  c1 l* S. O+ ?
    upp_interrupt_count  = 0;
# A* Z/ t/ [2 w  i: [9 o9 l& R    upp_error_count = 0;) U6 ~8 L2 Q/ w) B7 z/ b

' H+ j3 u. ^) K1 c1 s2 d6 |* k    UARTPuts("\tResetting uPP buffers...\r\n",-2);
  q1 M/ U5 H2 f% D, J    // Initialize data buffers/ n- Q+ \% H( `8 b
    for (i = 0; i < upp_frame_size; i++): Y2 v7 e1 v8 U/ s* r8 c) D+ |6 ^
    {: b1 [4 Q' r$ a8 r/ ?2 g2 b, I& k) T
       upp_buffer_b =i;5 n" Y, x( |- H$ s: J% Y; h
       upp_buffer_a = 0xDEAD;$ G4 h& q7 e: x
    }
+ o- v* v( _5 l' J
4 a$ f2 w4 o; c$ {, j; x" J  U  f    //for(i=0;i<1024;i++)
: g! @# U* [; e* ^    //    temp=0;
: G7 V3 D1 s1 n8 ^/ F& ~5 ]9 H8 W4 B3 B
    //UPPReset();, F+ Q+ r8 r/ F9 P. V2 g% k
    /*启动UPP DMA传输*/
6 }0 W) Q3 {/ ~: k    UARTPuts("upp_prog_dma_i\n",-2);
$ F9 C. z. g( z& n    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ B- _7 E  ^6 h8 T. Z4 r+ t    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 ~, M2 f) o) f, v! N% c    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);) E/ @" R6 [2 c( |0 |6 K2 t" B

4 R( X% p, S* h5 ]4 n$ s3 o  D/ [% n. J    UARTPuts("upp_prog_dma_i\n",-2);* \5 _1 R" h9 X& s! q# @; g
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;# U: F" w6 S+ B+ U7 b( m
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);  l, b9 K  }$ r5 s* T& E
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);) Q5 ~9 I% }% R/ ]* F7 c

- L+ Q1 Z1 J7 c( s5 ~0 X" V7 l. F    /*等待UPP传输完毕*/
4 O  r5 U* A1 z0 B; _8 }    //i=0;
  c( g+ ~$ ]$ d% w7 \+ d) o3 t, L    //j=0;
# i; ]% S6 B5 T: n8 A+ {, t* v    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' G7 A  o5 b  C9 u9 T    {
5 g4 A5 W8 m/ x. o# Q        /*  测试UPP传输的同时操作普通DDR数据% b( p! W4 M1 M; L/ @  a
        temp=i;
, t  y1 }: ]; H  I, L; }( G/ J        i++;
: F2 j# K3 r" c; x1 Z) Y        if(i==1024), t7 g' u& I& Q% f
        {
$ ?1 m! H, j9 s6 P; a& W            i=0;
# ?. m& E2 d4 V& g            j++;8 g( d* y) i5 X+ K2 Q. N
        }: }6 g+ q7 G! B
        */
0 h6 |2 G7 M. S5 U1 Y* B5 P, V
( o! l! }6 W4 C7 Q$ O4 k- g3 a/ W       asm(" nop");: O- \" z0 |. p; T7 F; L

2 i, I. `% {/ N$ G) v7 e8 O* \       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);* M1 w+ j( R" W5 Z+ L2 J, a1 {
    }
" r( y/ T) p: T8 C1 {
! r! A, m3 s# m% @    /*检查UPP传输的数据是否正确 (loopback modes only)*/
) o" h+ t6 S5 {' e    //UARTprintf( "i=%d\n",i);2 p1 N+ U' q0 U, E
    //UARTprintf( "j=%d\n",j);
" J5 \7 e# \  w; I! ~% |    UARTPuts("Data mismatch in buffers.\n",-2);
& T7 [: L2 V7 j. }    if (upp_interrupt_count == 2 && upp_error_count == 0): Z: O$ o$ J- I0 u9 N% g  k
    {% d! T/ v+ i/ d; y0 ]: |* n  w2 q
        for (i = 0; i<upp_frame_size; i++)
' T' R2 U0 |$ H& l& U6 T1 ~        {
, p9 ~3 P, ]& Y2 f( |7 z            if (upp_buffer_a != upp_buffer_b)
# l( A# q# {; M( L; n            {
; d- @  N. S7 B! M3 U' _2 W& |' \                upp_error_count++;
; ]$ ^4 E7 s  U+ ~- _            }
: z0 h" V, S& t; m" ?) Y. m! ~+ V        }
) d+ a0 g, g+ `9 R# Y' l8 H    }7 d5 C: k1 T9 `2 P
- Z- u# J9 B9 g7 D: J3 c
    /* 报告通信结果*/" Z! b& j: E2 b3 h/ s
    if(upp_error_count != 0)$ B) n* p$ h$ E. k  b
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
  h- F* _  I6 E; x    else$ p' ^% t$ \( ?: j
        UARTPuts("uPP transfers complete!\n",-2);6 V. l: L; P6 k' f
9 ^; |1 d( Y  o% N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
- A7 e. K+ ~. N+ R# d4 L    UARTGets(ch,2);
# g% O/ y- ]! ~7 _  \; D3 D    UARTPuts("\n", -2);
! |/ @3 s1 v5 W, E+ q; K  A2 V
" N0 R" X4 O+ A5 r' |6 [0 @    if(ch[0] == 'y')
  H  F5 c# d4 n8 H8 L) n    {: \4 [0 y+ b  _$ I7 G; M+ u( D  O) I
        /*打印全部读到的数据*/
( W8 [& T: E4 F) W& L9 O        for(i=0; i<upp_frame_size; )
) P/ t; B- ]7 o/ y* A0 s1 z        {: [7 V1 g# _3 x! y5 Q; T) y: P
            for(j=0; j<5; j++)& w; z# M% H# q+ Z
            {. G+ Y: q1 O! v7 Q& ^: _
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);4 O# E. s, s7 B) H
                i++;0 t% T! t' {* s
                //if(i >= 4096)
7 n9 z( y/ L, I, o* i! p                //    break;$ d/ h7 K6 X- s

4 G# R8 n( V" e+ A+ B            }0 T/ |  W6 M# |1 E7 I% E
            UARTPuts("\n",-2);' K; p8 F: i6 Q) Z5 M) `4 z
        }8 }* ~9 E" Y# Z
    }8 i, M' }1 V# c4 y
6 y5 p7 t$ d- z7 I/ c3 S% j
}

; m) J8 C$ N. k; f# v& [
) @5 f/ @9 \/ R: S, N# ^
' G# ]9 W% \6 p. w: H; [/ h+ _; c! U, l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
+ Z, e9 t% G4 G* f, x+ L# C
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。6 }1 Q: m1 I- V) ?" [: s& @
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 23:33 , Processed in 0.036163 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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