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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 ?, C7 _7 O! m" j
Void UPP_TASK(Void)
* c* a$ j$ C# B" k{% F7 p9 p8 l' e4 H0 A, G
: ^9 n" _2 M2 p8 H# A3 H$ f* t! S
    int i,j,k,target_int_count=2;2 {, ^+ L$ R5 G, ^) A4 J
    char ch[2];
& R& Y& \' m$ c6 B8 F* y8 \; [6 _
, y  ^4 ~# i+ D! o) `, z5 l8 l9 G8 L- j5 B0 J

: q8 O- T' O4 ]1 B: y7 g, _    upp_interrupt_count  = 0;0 R. i8 _* @% N0 }6 s% e
    upp_error_count = 0;
, P, @% x. Z2 X3 z. N; n0 M+ j: P/ C! W+ _% k% r3 [1 H
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ k. H  L# r2 V6 N9 I+ A7 J/ f0 ]    // Initialize data buffers9 g2 B. o& k! Q$ @6 n1 V/ x1 s" u
    for (i = 0; i < upp_frame_size; i++)
+ A( g2 Z* A) z0 Z+ t    {$ O1 Q+ ^' ~7 m$ u' C0 K! p
       upp_buffer_b =i;
" M& z; v0 F" B! z, `0 P       upp_buffer_a = 0xDEAD;
6 u' H6 H& o3 L) z' R    }
) E7 ]& x0 j2 F0 ~: Z% |  b7 B. e: X" i- |$ t, i: V4 m# \4 E3 I
    //for(i=0;i<1024;i++)
. X7 k8 g# q4 I9 X9 n  v- Z% d    //    temp=0;; S2 V) f/ H: J' x: ^: t  ^
* c1 o- B; E4 F( F9 j5 Y
    //UPPReset();
8 [7 F, Q" ^: @1 s    /*启动UPP DMA传输*/
8 o7 Z/ [9 |4 |: u    UARTPuts("upp_prog_dma_i\n",-2);8 C% D! i. \2 ~1 G1 _! _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' V1 g/ B! J+ u# H    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: M0 |" L  ?, P
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);( Y6 B) _. e6 i- S
6 [1 X! H2 y( d1 B
    UARTPuts("upp_prog_dma_i\n",-2);- a) p% d5 k' {, P, c
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 T9 K- X0 z$ N" r    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);* D% x% ^" X3 t" G
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);8 U/ X" b6 f  V- E, d7 ^+ q
2 j7 {# |, S" W9 ]
    /*等待UPP传输完毕*/
  _( L$ R- }4 l' U4 b    //i=0;
! x9 E" o( {# W1 b% H# E  b: M    //j=0;
$ }% B9 U! k/ ?! L& t    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( q- `. b- y  [7 S+ P$ C* z    {7 G1 z+ m- G  s7 r' ^$ H( A
        /*  测试UPP传输的同时操作普通DDR数据  i, T! K& g' W8 q; o
        temp=i;
7 [' S) p( o5 j% J. }: g        i++;
' L3 T6 }1 H: z) J1 }        if(i==1024)
! ?6 G$ ?. D% M6 r2 b        {& Y( T- P  ~- p# h& Z+ W& w4 a
            i=0;
# _" }) I: T0 S! w: z            j++;  z3 X! |+ I3 D$ H) Q7 j: A. w7 O
        }
1 ^7 Z/ i, [# p: j        */: r4 e7 n5 }% c6 A+ `4 q- E. U

, `5 s8 M. o, L8 @$ a9 h5 C7 |( r       asm(" nop");
6 i& }1 ]( y; t0 U% C% v( _; K- r+ j8 f
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 J; X/ C6 R1 l5 e- s8 ^1 ]5 Y    }
4 u8 P% {8 d$ t' M* x+ g: Y( l
- X; X( z# x5 p    /*检查UPP传输的数据是否正确 (loopback modes only)*/
6 Y9 b/ n* c2 V! E( V    //UARTprintf( "i=%d\n",i);$ H7 J3 H* h0 y' G* V7 S
    //UARTprintf( "j=%d\n",j);
2 \) V/ n# u# I; u; D( k  [2 {1 n. ^& T    UARTPuts("Data mismatch in buffers.\n",-2);
( r- p) `8 D6 J7 O7 y1 R    if (upp_interrupt_count == 2 && upp_error_count == 0)
5 r* u" s7 B- o    {7 L# R2 W7 p9 ?& H% U
        for (i = 0; i<upp_frame_size; i++): G: R4 s$ g# {7 H2 G( `
        {
$ M1 I; V2 {+ g8 l0 B            if (upp_buffer_a != upp_buffer_b)
5 {# E7 ?& S$ R8 r) W8 K            {
& W. B. A( p8 B5 M                upp_error_count++;
) y8 F' Q$ a8 W- {            }
/ J$ b1 G6 p3 _/ A        }
" I9 |4 f3 c6 N; g; s4 z    }+ B  D' k$ K& b, G! z/ Y; G
- A& C! ^$ p0 R% |
    /* 报告通信结果*/
' H' M- r1 i- U- v8 N    if(upp_error_count != 0)/ R8 Q1 q' ?, F' n% ?" E- J
        UARTprintf( "upp_error_count=%d\n",upp_error_count);5 ], M: l% p5 y$ E& |, |- P' {
    else
- l/ Y2 [/ o; }" N! d6 D6 r" }+ U        UARTPuts("uPP transfers complete!\n",-2);, g% O7 I$ x3 D% \6 @. @
9 G, O5 @5 h7 C6 d7 K2 M
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
2 e; `. q9 i, F0 {    UARTGets(ch,2);& b+ P. O% o+ x! t5 @) U/ A, r
    UARTPuts("\n", -2);
6 _* ?8 E- V0 m; s( y5 }9 p# g; f( x+ e/ v, W
    if(ch[0] == 'y')0 R1 E' L! M& P3 \: `1 j
    {4 N$ _4 n6 B6 o# O: p
        /*打印全部读到的数据*/
) O4 I. y* ~0 N. `        for(i=0; i<upp_frame_size; )
0 l- o2 y0 z/ P" b7 A4 J/ e        {
' ?6 W( m" [9 k/ @5 c1 v2 n            for(j=0; j<5; j++)
. \  ?0 S" q! d3 y6 U            {/ D4 b; ~2 `4 T8 m+ E% {6 k
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' C' ~2 D7 ?' T9 x) q; [) s
                i++;
8 K% G' F0 V6 {+ Z6 |                //if(i >= 4096): z" `* c, X0 `0 S* c' O) q
                //    break;
# y' w% H5 Z) h) L
6 y) J; N  H. R, l2 i            }
9 V4 F2 J' M' f$ i% g5 Y            UARTPuts("\n",-2);
+ c7 C# J3 ~& e( Y1 S2 R+ i$ _2 x        }
6 F/ }; K; o) P  r- u* _7 U    }4 u3 Z) x* B  D" |

" K+ g' A- W  \! ^) a, Z}
. g1 V, W' I. {1 B

$ s4 E2 n) L- T0 i+ }- y* T. k8 T# _4 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
( Y" \& @( ?: {. D( d
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。. \; Y! e% Z9 i+ Y
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 09:08 , Processed in 0.038527 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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