upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 t- f7 D2 X* U2 W0 W
Void UPP_TASK(Void)% g$ K) _1 k, j6 O" @
{3 `; b0 v6 o3 B' q' N' \' e

1 ^; s# U" p8 Y) H6 l    int i,j,k,target_int_count=2;3 o: f$ I! P3 Y0 P5 h
    char ch[2];) P3 J' ^: Q2 P+ @4 c

. L; Q* y$ k0 x" q
/ L2 r2 d) ?$ `% g# U, A. R$ t0 G& k1 }
    upp_interrupt_count  = 0;2 g" J. ~$ s# N/ w( Q: x
    upp_error_count = 0;
% c, F9 ^/ K5 P" K6 q% M
- K5 N- ?! R: x5 U6 g/ t$ B    UARTPuts("\tResetting uPP buffers...\r\n",-2);4 Z. A3 x% N" p. L- Q
    // Initialize data buffers
/ K* c$ q. Y6 n4 E- A" E% L4 R    for (i = 0; i < upp_frame_size; i++)
- f+ {! z6 x0 F4 _$ H  \! q1 e    {
$ y/ m( w- ^0 P: _       upp_buffer_b =i;. W. n$ H9 w! l
       upp_buffer_a = 0xDEAD;
" a0 J2 d1 {& t! |# L5 K    }+ V0 U9 a8 ?/ R: a6 n
! _. @3 p: a  w" R: x2 I+ [% e# G
    //for(i=0;i<1024;i++)
7 ?- A/ a$ N/ c% }2 s( q# ?    //    temp=0;4 k% i; w3 I8 }) l9 N1 j* k; N

4 o+ V. j7 K, G& l/ w, Z    //UPPReset();
% s6 A0 R  O4 U- m( i+ L. _    /*启动UPP DMA传输*/
5 x- Z: U; W% w0 s0 p5 B    UARTPuts("upp_prog_dma_i\n",-2);) a( @. _6 v$ a
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 Q& N% Z" q/ z7 c1 \# s1 w    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: E$ |6 H3 t! j$ X
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" {" N- ^  l+ d
' B6 P1 l" X. d% O    UARTPuts("upp_prog_dma_i\n",-2);
9 J. D, ^2 Y7 ]# }- e1 f$ A! |3 T3 D    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* d- W  W) K: o* f& t; I    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- _$ F9 G$ i) H) k) x+ C9 P% Z  J    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) w, `- K/ U5 `; ~! g2 L
# u: i6 k1 W4 l5 v# H/ b, X5 o3 L    /*等待UPP传输完毕*/
5 S: K( B2 N" b- ]$ x/ u    //i=0;/ q, O5 H! Z6 Z
    //j=0;" t& q1 W* r. ]
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)0 S0 P6 I1 M/ |/ Z1 i  W1 Z2 J
    {
' w/ f+ r  g, v7 l. Y$ Y8 S        /*  测试UPP传输的同时操作普通DDR数据
2 W+ E* |' g; A6 c3 i' K7 T        temp=i;0 l+ [0 ^! h" C2 \; q( ^5 D0 \6 I
        i++;$ u6 Z4 K$ X# G7 c: [
        if(i==1024)& F* I6 z- I& Y9 v- N
        {! Q6 x- X* U# f- [* C
            i=0;- d3 @" r+ [- S* M  d: ~
            j++;
  S% {& B8 w+ D3 S  [" p6 h        }
+ t" ^; f$ X" s        */
+ `/ z- i6 p! g5 d" U6 @, @; K7 L7 W8 |2 D$ C2 i* H: _5 g
       asm(" nop");
) D  e0 z. Z- u& E  J! O5 g) i) r% n- a( ]/ ~
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);- C+ k& z* x, D2 w( o: k1 b& H
    }
# B( K- a: d+ V5 I& H, |2 C
  j& j, A; B" v+ f    /*检查UPP传输的数据是否正确 (loopback modes only)*/
1 A) B! P% _8 Y- B' }6 B: n    //UARTprintf( "i=%d\n",i);9 O# l- y% e1 L# a
    //UARTprintf( "j=%d\n",j);
* j! K8 Y6 t  S$ y; G# H7 Q. i/ s    UARTPuts("Data mismatch in buffers.\n",-2);
2 q/ p  o! `2 ~' r( V    if (upp_interrupt_count == 2 && upp_error_count == 0)
3 f$ V, ~% w: _# k! c/ W    {2 o9 M  J8 e- y7 e
        for (i = 0; i<upp_frame_size; i++)
: p6 d# u1 K& z) B        {
% O" Y- a3 E7 W5 |/ R            if (upp_buffer_a != upp_buffer_b)
$ v6 `( x0 k% f" @, y, P; g# {& b8 y            {# u* u" ?$ z: W) D: O% v( f
                upp_error_count++;$ Q8 B& m4 i. z( l! S# b, |4 v- r. \
            }" X; x: [; L% k" p  x, S* V/ X& N" x
        }' C  @; B2 V3 X
    }
( |7 Y0 ^! o( A' ]$ t* @- _4 v# {& e
    /* 报告通信结果*/
/ D$ g& B( f  a3 s    if(upp_error_count != 0)
; x  y4 g$ Z' H, e  g0 x" B        UARTprintf( "upp_error_count=%d\n",upp_error_count);; v* Q5 G9 }9 g: l# }* l
    else: j5 L1 f3 C: q. E0 C: @: U
        UARTPuts("uPP transfers complete!\n",-2);
6 w" `) s& j. f. T$ ]
0 ^, ?3 L9 N. K$ q1 z    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
* ]3 j  w9 O# }& P    UARTGets(ch,2);3 J. E8 n5 V+ P; b: N; p) Z' y# M8 J$ t
    UARTPuts("\n", -2);$ T( t& }8 J4 ~6 _1 q
1 C3 o& V' v- V6 ~0 J# O
    if(ch[0] == 'y')
& s, a6 K2 a0 T  }7 t+ m- n    {+ Q" v; z& v- A, X! C) i# V
        /*打印全部读到的数据*/$ ~  h. f* B8 M! p
        for(i=0; i<upp_frame_size; ): G  X. q- M  O
        {
0 {& o! q* r+ z) y9 m            for(j=0; j<5; j++); O& Q3 v8 a) Y, s2 t3 I
            {/ B/ G9 ^0 R0 E# e& T5 O, L
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
$ H; A6 f* `- V% o2 u5 b  n: R  ^                i++;
, Z) |/ e" b7 E3 U                //if(i >= 4096)
7 r) b& [# a+ G; K6 Q                //    break;6 {. |  J& A9 R. u! z0 `' ^
  V3 c! G0 s4 }# l4 o) b# a
            }
( G' g( `" s( l" V; U8 X3 W9 a# ]            UARTPuts("\n",-2);* D- A/ Z; Y* ~! l" n2 D
        }/ w& ~9 H4 A9 a; f$ X1 f- {# ^
    }( G+ _* x  L" y) [! P

" D1 Y2 N2 w2 Y* ]" L: v}
, |1 L# l! i  z& \: B

1 \& V! z* d! a4 S1 w+ p
' i1 q( m4 m' P2 {2 F3 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。& }6 I, I, \  c% b" c! ~
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 R& [: T; F" m# B0 s" m9 g
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-29 10:06 , Processed in 0.039477 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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