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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?9 J" X0 W' N- Z0 I
Void UPP_TASK(Void)) C% ~' x8 Y2 t& j+ \2 U
{
. j+ G3 L3 v; v' N
+ _& W% e* X0 O! r" z9 X    int i,j,k,target_int_count=2;
, g/ ~5 }$ u! C0 F* }, T5 I; c. m! O, h    char ch[2];: s* P, a5 K- A7 N# H  l
* P! z8 @# h/ v4 U  Q, m

8 Z* @, @- ]- {2 H( x
$ z. c$ s9 d0 V6 K# H$ X    upp_interrupt_count  = 0;- d# `4 t4 d) X; P
    upp_error_count = 0;
. S, U1 P) s, l- ^- x. D% ^0 A7 w- I6 t7 K5 J4 L0 P' }
    UARTPuts("\tResetting uPP buffers...\r\n",-2);* ~) J: c* Z! x: G$ y
    // Initialize data buffers7 V6 J. u+ e% m0 X- q  E+ d4 V- r
    for (i = 0; i < upp_frame_size; i++)
0 k' h; p4 W+ u0 ?1 y9 H    {/ ]: h& Y+ [6 E0 N! v5 |
       upp_buffer_b =i;
* c; D/ m1 E& I8 B       upp_buffer_a = 0xDEAD;
! |( _8 z! T- m( Q& Y9 R    }4 ]+ b1 n# R) w4 r" m' x

. l0 Z- o0 g1 S& H" i3 A. L; m: a    //for(i=0;i<1024;i++)
1 F9 |+ {# o" A+ ]    //    temp=0;
1 M9 L; l- c" z) F! o/ @, \8 n7 p( w6 [
    //UPPReset();2 a" R; Z) U8 j  y& @
    /*启动UPP DMA传输*/
9 c% R- K8 z: q: L    UARTPuts("upp_prog_dma_i\n",-2);
0 V& i6 I! D- f8 q, B0 a    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;4 G5 }1 s4 K4 m4 i
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( c2 F7 M; F+ Z$ F    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& i, M& }8 }- R; Q0 w5 S' x0 ]2 C% k& ~3 y, c
    UARTPuts("upp_prog_dma_i\n",-2);
' u; G9 h/ I% |$ {% A$ }: {    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ @; T) T% Z# p" a, H
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ g" w% G4 b. Z/ M3 H7 q    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);9 u, k* w" ?" g0 y+ W# Y+ K

* N: x% B% g3 u9 q# |    /*等待UPP传输完毕*// J' D5 J8 L, n9 `  ]  s
    //i=0;
% c9 {1 |  H% b3 z/ N; H- @4 U    //j=0;
9 m" ]- G4 q& }! F% _3 S0 d: a5 b# @. ]    while (upp_interrupt_count < target_int_count && upp_error_count == 0)7 ~. G& {" o% J( f$ c
    {( j+ d  U' [2 [# i1 ], K5 X5 A; T
        /*  测试UPP传输的同时操作普通DDR数据
$ J  z0 K- F' ]$ ~: J5 {        temp=i;
7 }. e! p5 x7 u) \- a7 h        i++;
4 ?: M- D) D9 M        if(i==1024)$ T: \9 W1 ~6 u8 X! x
        {, Z/ @, ?; e9 N& k, I/ W4 o! W
            i=0;
! y; n, ^" y. Y* S4 g6 }            j++;
) w* X. l: `: |% q/ a        }
# x. E/ S* X, Y+ t; t& E# x9 t        */4 S! t. r& k$ Y

  B! B( g% h! {8 ?: Z  t       asm(" nop");+ P! `- l. t/ y8 \
8 i0 x; ^) p0 a/ l
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);8 m! m3 Q, c! c, E* x2 l; e
    }1 p1 \# |0 U, q1 P7 f6 u

' o1 L5 I- J) b    /*检查UPP传输的数据是否正确 (loopback modes only)*/
0 `0 M3 r3 h8 ?% ]1 i+ I    //UARTprintf( "i=%d\n",i);9 f/ W* U% M7 e4 d2 ~% |
    //UARTprintf( "j=%d\n",j);2 H4 v9 @9 M! _5 ?
    UARTPuts("Data mismatch in buffers.\n",-2);
$ a& L2 _( t' k) r! n3 \    if (upp_interrupt_count == 2 && upp_error_count == 0)7 I1 Q7 D; C/ {
    {
, D! A2 L% N# p( p4 o. \1 |6 Y; F# y! n# \        for (i = 0; i<upp_frame_size; i++)2 Z4 B: p" \  w+ t9 Z) ~2 h% \
        {( [5 y9 I1 a' `+ [# {  t) Y7 r
            if (upp_buffer_a != upp_buffer_b)
2 L! P. M1 h8 P( Q7 l! N8 m" q            {  l/ W4 T2 J) A& b# H
                upp_error_count++;4 m+ h8 A8 @+ u# Y! l; v! j7 A
            }
, f% D% o. f- Z$ x        }4 y4 Y! J# k  m
    }
' E2 g4 A2 r; h2 S2 W/ A& i4 W, C" ^; Y" {
    /* 报告通信结果*/
+ ?% S& k5 l0 Z) e- [! i    if(upp_error_count != 0)
9 L) `! P! x: R' @' M0 r9 h; m1 R$ R        UARTprintf( "upp_error_count=%d\n",upp_error_count);: m/ O3 @0 U' T2 h" q  F
    else
" n  C" ?% q: K9 P, Q. K        UARTPuts("uPP transfers complete!\n",-2);! E# H2 `7 Y3 E' C4 K( ^
3 y$ R  J8 f0 p1 P& u% q
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);( u# C1 C" d8 T
    UARTGets(ch,2);  \3 `3 s" R. O$ E$ u, c0 J
    UARTPuts("\n", -2);2 n9 l: x; {) P
. c! E- j; Q9 z3 s5 X3 F
    if(ch[0] == 'y')
* p7 _6 ^: _6 ~$ P) s' {9 u    {
2 W7 ^! ?, v2 d- ^+ d8 N! f        /*打印全部读到的数据*/4 J% P) S4 L( }3 R! |
        for(i=0; i<upp_frame_size; )
( w  I/ ^' l& b- J# M" T        {7 n  t, R1 J- C/ }: R& ^
            for(j=0; j<5; j++)5 R* V% h& v* J) f
            {
9 f  Q) p8 o6 N# Z& ?                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);2 s) a% i; w* P$ o2 H. J
                i++;
* Z% W* I3 V8 C* ~$ C4 p2 _7 l6 }                //if(i >= 4096)
9 G% I$ \2 Q7 ~. \                //    break;
1 f5 }& X8 Z' ?
+ _: j  e0 [7 d* S7 `            }
$ h! {2 s/ P# s/ e3 K" G  m            UARTPuts("\n",-2);+ g/ H5 [# W/ \& h
        }
- z! G( q  r9 ]! h' p    }
- i( @% Z4 W0 R9 R1 c
/ W6 z/ y, Q; u}

1 A& B) ^1 S2 q/ \

7 C- c0 e- _8 Z4 n0 H% V8 Z4 a* _3 m9 E3 y7 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
6 ~7 z" M5 p4 m  [: N
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。' F' Z+ a! Q* v5 b! H
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 18:22 , Processed in 0.060357 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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