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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! N; o' ~& }+ Z3 P, w( P3 J* A' h  ?8 Q
Void UPP_TASK(Void)( J" S) R# X) }- W. c: r: u: n: s
{
) e  m2 a8 [  B$ Z! z& K$ k+ B; j# Q- q  _
    int i,j,k,target_int_count=2;
. L" {% l. q7 X    char ch[2];
% W" H7 N3 K7 j' v2 }. B1 ], W( y1 m$ |/ j+ V4 ~1 L
* x) k+ R. u  y) d
+ }; F6 q; h3 l0 K* z+ `3 l
    upp_interrupt_count  = 0;
2 Q8 w0 a1 c' c, S    upp_error_count = 0;6 X. {9 B! Y( e" Y% |5 U

5 q8 H) r% i+ W8 h' \# q/ t3 `( t    UARTPuts("\tResetting uPP buffers...\r\n",-2);6 C/ ^( q6 t& T0 @) m
    // Initialize data buffers7 W" ~  ?5 ~) S7 u+ a$ L. q3 _( \3 `
    for (i = 0; i < upp_frame_size; i++)
8 a% w! Y$ U/ j0 k    {% G; r+ k) d( ]
       upp_buffer_b =i;
+ p' z( ^7 p9 i  m       upp_buffer_a = 0xDEAD;" Z* s2 Y% P* W! b( E3 A, x- X: I' m
    }. Q" G/ M3 y" `
+ c4 a+ n) K0 p( v* P( ^
    //for(i=0;i<1024;i++)9 y0 Y1 I* g% P) w' j' t
    //    temp=0;
$ h8 z" g0 U+ A2 x! r" O" l7 E
: U: d  p6 c9 {( ?5 A    //UPPReset();
4 h9 C: k% b3 k8 ~! |    /*启动UPP DMA传输*/
! P$ \1 b9 K! ^0 I  m1 q8 Z* X    UARTPuts("upp_prog_dma_i\n",-2);
+ k( u6 j# k- Y% S2 u6 w    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; d$ o: p" o0 Q8 [0 \- y6 ~# x    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- L  X# U' V( g3 E" T- `, B
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);  h  N% h5 o; J1 \9 C" v5 X

+ ?+ X2 d  `. k    UARTPuts("upp_prog_dma_i\n",-2);5 k" s8 {7 o% H% u- h
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;/ Q6 O5 o+ m8 g. R( d
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ ^2 t4 t) w3 f8 N; O7 Y
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 h/ r$ a! }* p* U/ N9 t, }9 {& \; a$ X( F; ?
    /*等待UPP传输完毕*/0 \. r. z+ S1 m+ P* o! @( g8 n- D6 S
    //i=0;
2 `1 m$ P1 R2 M! C    //j=0;' Q: A$ C& g+ h3 ?( h' y# N3 \
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)$ G" a0 T8 f. C" u
    {
4 ^+ b! ?+ v3 Q        /*  测试UPP传输的同时操作普通DDR数据
4 p" T3 l% Q2 x$ I5 e5 o        temp=i;
; D2 g: M$ X5 V, V$ s        i++;( r7 t; w4 v( b% A
        if(i==1024)# ]3 ^. B  e6 k" i: y
        {9 C" O/ i! \: I' v+ X/ w% {
            i=0;) [: s: s" O& u9 P) H
            j++;- y; n# I- u/ x& l
        }
& U+ L! k: c/ D; a, M2 r        */8 ~1 E9 Q$ n/ ~, ?" @9 V7 b
$ q( ]! r' _$ o) y$ c; z- ]6 D
       asm(" nop");) S& |; B4 ]1 e: m, j

/ [# V, }3 u+ R       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ q3 {8 m1 A$ a9 T- c2 ~! E    }7 [$ ]2 B0 f: t7 V3 \

4 Q& l4 Z+ [1 o- s    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 [# e& o, u2 Q' A
    //UARTprintf( "i=%d\n",i);
9 Z5 G1 z0 p( t    //UARTprintf( "j=%d\n",j);
$ z; ?- I8 C  w9 ?    UARTPuts("Data mismatch in buffers.\n",-2);6 ^9 _, L/ s9 U9 u1 r% [
    if (upp_interrupt_count == 2 && upp_error_count == 0)
/ \9 Z7 B  c: J% }% R: @# R( ?    {# L5 O/ \  [6 W. C- y) C
        for (i = 0; i<upp_frame_size; i++)
7 N4 L& l% b: u9 c/ p- m0 c  `        {: N$ ]$ T2 @: g4 O! L9 |3 V
            if (upp_buffer_a != upp_buffer_b)) r) F% A- k; w4 u
            {
. H- F3 K+ A% C1 q3 J/ L: q                upp_error_count++;& D5 `6 q; E- R* i3 P2 g% ?
            }
; [4 b! e! {: q        }
; D7 j) e' c: y8 O, o' c' F4 }    }' X2 c1 k/ w! i4 r7 H1 d& r3 O" R

- X- x. Q& o+ B, c2 k8 i4 F& a    /* 报告通信结果*/
: a9 s0 ]' t" i2 P1 [7 }6 \+ ~( @    if(upp_error_count != 0)9 M7 h$ P: H: x8 H$ L) e
        UARTprintf( "upp_error_count=%d\n",upp_error_count);/ M3 [2 u& k# t# k+ z
    else
- c4 R/ I% q7 @1 @& i        UARTPuts("uPP transfers complete!\n",-2);' m# a  S: W) f5 }+ J& T. B

  z3 Q( {7 s2 b; l* I: ~    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 |+ T5 S! l8 N, @: _
    UARTGets(ch,2);+ N) m+ T* l  S2 R  v- T. g
    UARTPuts("\n", -2);
; I) }* I" h! h% h* y/ F) O- Q8 L# l& u6 V( h6 i
    if(ch[0] == 'y')
9 f# Q0 g, C4 r' {    {
4 U. Z) `7 `" U* E        /*打印全部读到的数据*/6 h9 H' @: i" \- |  z) T
        for(i=0; i<upp_frame_size; )) u7 X" z1 I- K
        {! p, m' _+ `) P+ X& D2 n
            for(j=0; j<5; j++)( ^" v7 ]4 U4 R+ {
            {
( @/ T3 Q5 \7 r                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);( F( V! ^) G' _9 ~
                i++;" g2 w/ C% C5 A# I4 }. F
                //if(i >= 4096)
* y8 w5 U) `5 L                //    break;
. c, L0 h( h( _6 ]
5 ~3 j% a, [4 D6 c, q            }$ A/ w5 Q; j1 Q1 x* d0 k
            UARTPuts("\n",-2);
- p5 q; _* _7 F  M; @/ n        }
% F1 v5 k' l3 O% q" Z    }# b3 r0 E/ s4 }3 p5 y

" A9 n9 ]! J$ j2 N& U, A}

, |1 B; [  [1 s$ R0 i

# x6 y; y. f! y6 y! m; C
1 M! M5 I* f( \7 m6 t+ F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
. X% ]$ o) H. `( Q' Z9 x& s7 i
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. \$ y# O5 V- k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 07:09 , Processed in 0.037927 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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