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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 @+ `) x$ r% E- D2 M$ k
Void UPP_TASK(Void)
8 ?  U- q. I- M0 l' d{2 o6 I% f/ v$ x2 z

8 e1 {, Q! ~1 J: Q    int i,j,k,target_int_count=2;4 J$ H7 P; f! Q% t
    char ch[2];- f# C# b* Y7 X

$ x" X5 L+ ~4 @6 @$ i2 l+ o( Y; _$ W! I( a2 P

! k) t9 @& B. j* k# J    upp_interrupt_count  = 0;
$ O2 \4 a0 w1 ]; K. s% S" _9 K    upp_error_count = 0;
8 w" b, v6 d4 c) i6 n3 Z+ I
" ?  z8 L. g7 t4 ?    UARTPuts("\tResetting uPP buffers...\r\n",-2);* |/ P; J  l) m' T3 E' E  A; T
    // Initialize data buffers! a( b/ E( J2 V7 {
    for (i = 0; i < upp_frame_size; i++)% @' a( H, t' d7 c: {- m
    {  }3 k1 I* R* i  I8 k" B! y. m
       upp_buffer_b =i;8 d2 ^& r+ q/ r1 X& n
       upp_buffer_a = 0xDEAD;
1 ]3 Q# l5 G; w2 S9 X    }. p2 \% R8 V2 x/ f! s

9 P) U# L* F- m( i    //for(i=0;i<1024;i++)' t& d8 P# J2 ?9 {
    //    temp=0;- n. ^) k- k. c/ K6 _' C' y

5 w' [) {: }* P6 @1 T" G) ]3 [    //UPPReset();+ V  s: I. l& Z* d2 w
    /*启动UPP DMA传输*/
0 z- S. P! J0 G+ M6 t: S    UARTPuts("upp_prog_dma_i\n",-2);
& u7 F* x3 L& O2 X    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 h0 O! W" G+ q; M    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- C* u$ W- S0 {3 P    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- Z' `" E) d, a& q4 W5 _  j) ^3 g$ ~
    UARTPuts("upp_prog_dma_i\n",-2);/ C8 G% o) y5 m; Q9 u
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;+ T, H, k3 ~1 e# r+ V4 p" Z6 w
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);" D2 _( u+ R$ E) B
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% d' k( F5 C9 L1 z- J6 `5 ]" t
7 D9 c3 Y' H5 S1 Z9 a# a3 |2 L    /*等待UPP传输完毕*/
( c( d- R$ V; o# y& c3 r    //i=0;/ g7 i: i5 Y7 C6 |7 N$ ~9 O
    //j=0;0 y$ v) t( \# J
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 `5 D$ @$ b; Z0 y  v4 x    {
, ?5 v: r6 W* ^2 k7 F* P4 N6 D, R$ J        /*  测试UPP传输的同时操作普通DDR数据4 H* a; E) T. s/ @* h
        temp=i;
+ M1 G6 F3 @4 c        i++;, I' M% u( n! Z  e# g
        if(i==1024)
- o7 G# `5 Q( ^+ w3 J: n  {+ r4 {        {
$ o8 ]: l3 V# W; R            i=0;3 N5 `: q3 Y* D+ G6 b
            j++;, Z% U: q- |0 A$ f0 ~
        }) u: Z7 @1 c2 g( S1 v  H
        */
) v9 _  G- c6 j0 q5 Y
1 Y0 c' W1 Y0 ?7 U       asm(" nop");1 D8 w/ i4 c# q% A( e/ d
4 n+ m) b& x( j5 w
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. m+ Z/ D* d& W; ]) n% q+ u+ m    }
' I3 h! q6 K# l, L8 k+ U4 E* B
. R4 `' w  G, o% U    /*检查UPP传输的数据是否正确 (loopback modes only)*/
4 O0 o! a  i1 A5 u    //UARTprintf( "i=%d\n",i);( [- Q) f: C; V+ B  U
    //UARTprintf( "j=%d\n",j);
0 O4 o3 P, D; ^* Y, S7 a    UARTPuts("Data mismatch in buffers.\n",-2);
' L  u) d2 a8 \9 w. Z9 O    if (upp_interrupt_count == 2 && upp_error_count == 0)0 o$ t5 L$ L1 {: v% M3 A
    {- I" \7 ?) ?+ m( X& o0 j
        for (i = 0; i<upp_frame_size; i++)
& d. p: p* r2 f% n        {% _. A: k+ w0 L# m
            if (upp_buffer_a != upp_buffer_b)
- q8 Q# S8 w! e9 a0 i& _+ Y            {! T8 }) N) i2 u* b: |
                upp_error_count++;
7 `  \8 N0 V/ {. E5 _' ]            }
/ H  w7 A7 Q+ [  r1 m, Q        }- A8 S+ M* {/ K8 A2 X5 o7 d
    }
  R; u- j5 w+ w( o2 e7 |6 Q: s: q) Z' T& |
    /* 报告通信结果*/0 e3 V# e% g4 E: s! T4 Q1 N
    if(upp_error_count != 0)0 B& z3 }% y1 ^' Q0 x, b
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
# q  s- W1 g/ K3 g. x6 W. i* m    else
" q$ y, j# o) m( Q  P9 a% P        UARTPuts("uPP transfers complete!\n",-2);
- }1 F0 c7 R1 N; K/ _, C8 C9 ^7 t9 t' w1 U3 _. S& e6 R
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
8 z: R. p2 f- d" Q' ?    UARTGets(ch,2);  j' j: n+ _) B; h( b
    UARTPuts("\n", -2);* g2 K% [" w/ s! O- ~$ y9 L- L! D" D

* q* q' ]. X, V' O  {0 }( G! a5 Y    if(ch[0] == 'y')% e( d" t& R5 g$ B1 O
    {. b8 C& k% }% [) y
        /*打印全部读到的数据*// _) z+ V  d; C
        for(i=0; i<upp_frame_size; ), E0 g$ c. ]% n' [9 ?: s; w" Q
        {6 X- ^# o$ p" ~: ~
            for(j=0; j<5; j++)
, X) d, W" Z7 x% W6 }) {            {
! T$ S/ \7 D5 t3 O$ ]                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);. W- `* K/ T7 s- S( g% p
                i++;+ V+ h3 z$ _2 o- d# A/ X4 a
                //if(i >= 4096)
$ a0 v0 ~/ z5 x! ?3 U0 N8 y                //    break;  N) I2 {0 W% H+ l: |0 r
. e2 |. V/ @& F" @* J# C, _
            }
) t2 I( s3 o' E  W0 [            UARTPuts("\n",-2);! b' I! g1 z* t! M8 S
        }1 v8 _2 D9 e0 D: u8 N2 X/ V
    }' P/ a# G; ^1 C+ z; ?9 B

& x7 U$ u/ ^& n# j5 k# M' i. A* M! b}

+ F$ p! ^' B+ D6 l; r% ~5 F

8 g( }, h6 s' z0 N8 G5 {* e6 \7 u# b( J+ J& {% B+ f1 \9 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。2 _/ M: z+ b  T; R* G) t% A; l: v
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 23:14 , Processed in 0.036407 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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