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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?* j* f$ @( U- M, {+ N
Void UPP_TASK(Void)5 G' b1 q& a. T% P, g
{
8 ^1 U# v: ~$ x$ ^1 y: ?
% k  _5 b. p8 o/ }6 G    int i,j,k,target_int_count=2;7 A; V( X: m5 Z4 p: n' D! q
    char ch[2];1 u4 ?# `/ m2 R2 I1 B4 c
: K  \- Y9 ~* c

4 z5 j: ~2 o9 Z# |( p4 m  Y+ ]% n5 d5 Z+ Z1 _7 a" f5 L
    upp_interrupt_count  = 0;$ A4 E1 `. {8 \% L( u; `
    upp_error_count = 0;
" e5 _5 `# w5 K. g2 a  i; f" G6 `) Y: r+ G9 A
    UARTPuts("\tResetting uPP buffers...\r\n",-2);, c  G, a# l% k) H. z- x
    // Initialize data buffers  A/ M+ {" b( Y/ H
    for (i = 0; i < upp_frame_size; i++)
7 ?; K1 g: M% ?0 V( Q& d    {0 a- Q! D% S& p, W+ z
       upp_buffer_b =i;9 J) @9 [) U8 j/ R& r
       upp_buffer_a = 0xDEAD;
: M8 g# E8 O- m0 G8 C    }
. f2 N# ?6 A7 B6 q) X3 j, V# B/ p! h
    //for(i=0;i<1024;i++)2 |* y" [+ S- t* ?  h2 G& q
    //    temp=0;
( ^: X' v9 Q: v$ ~  ?2 R- X) J/ a. J  I- l* I1 s& g
    //UPPReset();" J0 m/ D) j, p. I1 |- `
    /*启动UPP DMA传输*/- {! [% [: K$ W! E
    UARTPuts("upp_prog_dma_i\n",-2);
0 n8 v# n6 }7 F" H! q. V* _  J    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;9 o1 p1 A# `$ F# D, B$ N
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);# ?" Z* A. d2 T7 X
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 g9 F; D# w, Y
6 N) S2 s7 i1 n$ q. ]    UARTPuts("upp_prog_dma_i\n",-2);
( B% x+ }! G6 d1 l0 U0 O( J" X    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;7 @/ |  g3 d. ?' d# k
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' i) E  m" h2 a    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 W1 c7 Y- U0 C; N( \7 ^5 V
7 K( ^3 }- v& X$ |( L    /*等待UPP传输完毕*/3 K* Q" F; b5 m2 N0 W5 ~
    //i=0;
; D8 c# Y; w+ N; b6 N7 p    //j=0;
- s. d+ z& o8 w+ v" D1 Q3 j$ B, D    while (upp_interrupt_count < target_int_count && upp_error_count == 0)  P" p) X- ^* d. f) i; W# v# f
    {
( P3 ?( m9 F! ?7 L: D- ?2 ]& @        /*  测试UPP传输的同时操作普通DDR数据
' b5 Z0 h% y1 {        temp=i;: m. A9 K  Y$ M2 _/ ?8 U& O
        i++;
7 j: t0 }! U3 v7 Q9 V  e5 u/ A# b- X6 e        if(i==1024)5 U( b" {; m: Q! A' W+ |
        {3 L( u; _/ k, A7 m- S$ z% w$ o/ ^
            i=0;* I& b( E# l9 V6 N& U6 y9 G
            j++;3 E5 |- v& P4 o9 _  Y2 S; a5 `& f8 j; i, c
        }. m) ~% n4 N) M! s8 W" M& v
        */1 c8 o$ r( q) \. d) M3 d
( N6 X2 c) ?6 T. T
       asm(" nop");3 Y! G" s$ _2 O* R. j8 k, N

4 c5 W+ r7 C8 w       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);) {1 P' K0 m; n
    }
3 B/ k4 m( e& P
( I* j& e4 r. P0 y7 M    /*检查UPP传输的数据是否正确 (loopback modes only)*/0 U( s0 B4 t; p  g3 U/ j5 p
    //UARTprintf( "i=%d\n",i);5 o6 ?5 _1 H! x
    //UARTprintf( "j=%d\n",j);4 Q2 d0 ?( c+ X4 p" r
    UARTPuts("Data mismatch in buffers.\n",-2);; d- g4 J, U2 |8 l3 W
    if (upp_interrupt_count == 2 && upp_error_count == 0)$ O6 M& F6 V5 T5 P% u3 X5 ]
    {
1 H+ U5 h/ I4 r/ l4 Y9 x6 X$ B        for (i = 0; i<upp_frame_size; i++)6 S# C* S2 ?1 N: F" L
        {
. w8 ^' m3 ?9 t6 L* _            if (upp_buffer_a != upp_buffer_b)
; W$ @1 s/ }2 i- d/ K6 A7 b" x! @% [# L            {' c# O! w, D3 q/ a3 Q' R
                upp_error_count++;& j1 O  w& ^$ W  ?
            }
. V/ k, T6 B  q% Z4 m$ t! l. U        }' l/ X; A  W( o- s! b" ^! S
    }
: P+ C3 h7 }; T) z  k8 z
% U* p5 e3 K- x* I& h4 g' Y3 H# J    /* 报告通信结果*/
$ ?/ f- [* K3 Y* B" U    if(upp_error_count != 0)
  _3 K) p/ U) e  j) F5 i        UARTprintf( "upp_error_count=%d\n",upp_error_count);% `7 a6 w# K& P. l1 R+ Y
    else
$ D1 ?, b7 r3 r2 P        UARTPuts("uPP transfers complete!\n",-2);1 `* |8 B& y, y% p9 `: m2 j- c
8 x) l" L1 p' r
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
0 r" e+ p, U. M9 b1 i; ?- \    UARTGets(ch,2);1 n9 }/ K- g$ E7 ]! e# Y
    UARTPuts("\n", -2);+ k8 B; G3 `& Q3 z9 P! e( |* [

1 S7 M6 S% X/ _+ D    if(ch[0] == 'y')
3 e- N( [8 V7 y9 Y0 r5 U' k    {
6 v4 ^1 b- l! e( q        /*打印全部读到的数据*/# S' G  M# k/ O3 ]6 L5 n$ N
        for(i=0; i<upp_frame_size; ): `# A8 b1 ^/ t* D) B" x2 T& p
        {% _- O. k! Y# ~! L5 u/ I7 r* y
            for(j=0; j<5; j++)
( R8 V, ^8 z$ I$ x            {
4 ], g0 b0 D1 d: y                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);6 F) d' u$ U5 h/ p6 C* p; L$ T
                i++;' ?. l# ^3 [6 [! |. j9 U
                //if(i >= 4096)5 q) U: v$ |9 J" n7 k
                //    break;
5 Q0 H9 Y- }8 _) m# Q- v7 W. i1 z5 `6 U( A5 M
            }
. {4 j; g" C/ }, q            UARTPuts("\n",-2);) G2 \. Q- N( U( b; z
        }3 G& I1 H* W2 \0 U# j; |6 K
    }
' @2 }  M( p" |' O9 P1 f* T! ^6 e' E: g  h- y. y' T9 o3 Q
}
9 ^6 U* E; u' y) x

$ N* b* ~1 }9 a( S* C+ h
+ B& q5 V& t4 Y0 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
9 w. P1 `- Q5 e$ @0 X0 g4 G3 T
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。9 G. M* N8 p! ]  i8 G
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 04:58 , Processed in 0.045892 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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