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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 K* f5 B- l* T' U
Void UPP_TASK(Void)
6 `1 A" j! R' x0 r* u1 a$ W{
' o. W3 e% \- S5 Y
- g4 m0 z2 L; Y    int i,j,k,target_int_count=2;8 c; w. f1 W4 A& ^3 N  d& f
    char ch[2];5 S/ k* x* p% @" l) A6 [/ K8 r

- O6 o- Q- q! p6 D0 H# g; P6 b8 Y, l! V2 m- c: \- ]
/ I: J4 c" Z; J" q! A$ q7 k) O
    upp_interrupt_count  = 0;
( k, S' B! @: W7 g! n, M    upp_error_count = 0;3 X5 O$ J& e! _' Q7 n5 ?$ b
/ w' x, s; ?  j9 n' L5 C. j
    UARTPuts("\tResetting uPP buffers...\r\n",-2);: l: S* K; B9 p  V) D& A
    // Initialize data buffers( q( y; ]4 m! X' k. P
    for (i = 0; i < upp_frame_size; i++). }. }  a+ G5 O) n. R% i
    {8 k% r; w9 z1 T9 b5 d
       upp_buffer_b =i;
  a/ V$ q! N; w2 [: c       upp_buffer_a = 0xDEAD;( q9 \7 `# u, d8 T
    }
2 T  T1 W/ l) [3 _  Q5 ^& J
  K5 A& _$ r6 [! ^5 m    //for(i=0;i<1024;i++)$ B  s" F5 j; J6 P0 E9 k" K+ G
    //    temp=0;
* G1 k" v: f, [2 Y$ ~1 U; {  \) }! e% S0 R/ t# [
    //UPPReset();
, {) [- d' g* Y# G0 q5 {$ L    /*启动UPP DMA传输*/9 b! l/ T  e2 N1 [5 H
    UARTPuts("upp_prog_dma_i\n",-2);9 U' ?9 A: y) Q" p4 w8 K7 Y
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;. m, D. B* a1 O1 D+ l
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);: q8 B" x: z1 v
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);* t. E+ b4 g9 F% h( \1 Y' p

" t! ]  J: Y; J$ E, ]    UARTPuts("upp_prog_dma_i\n",-2);' r9 b; ]' ^# }- l
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 x. K1 W/ `9 u4 y$ @1 G7 H8 Q    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);& w, H# T, j  s/ m3 h
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);$ p$ i) D* A. U6 r- e' A# s
7 k- D: i; f* _4 p: K
    /*等待UPP传输完毕*/; [9 d7 I' @- ~4 p
    //i=0;$ H# V- @0 y4 Y6 Q( Q
    //j=0;
9 i- `4 t# a0 R    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# t6 v  }" x% G7 u2 h+ c- L    {% n1 R0 f9 l: J. u2 X3 q7 n
        /*  测试UPP传输的同时操作普通DDR数据
$ c: e, G0 d/ j$ G: A+ K% F        temp=i;
4 S+ k& D/ e  I2 \2 a7 d9 }        i++;2 Y) U6 g6 g4 Q+ |  h/ v
        if(i==1024)
1 |2 D, L! C: _! k4 D        {
4 h2 C: ?4 B; U/ J            i=0;" \9 D* e, `1 n
            j++;
( _8 {. z0 c% [% V4 r        }, I; d4 T( c- o- l* O0 o- G
        */$ O7 u% W" N" L7 a
+ H# R4 x8 h4 G/ b' O0 D( N# |
       asm(" nop");/ |9 n. _( I3 @' B! Q1 {. s- U4 g

. I. f- F/ r  U9 Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. Z5 ~( U0 h7 a( j    }
1 \% J6 k% L* u; L4 B
6 J! F1 x( n0 E- U$ ]) u    /*检查UPP传输的数据是否正确 (loopback modes only)*/1 K5 L( j# H8 M
    //UARTprintf( "i=%d\n",i);
( M1 c/ m, B. j/ S: e    //UARTprintf( "j=%d\n",j);
# L% X% \8 W% r; X/ N# S    UARTPuts("Data mismatch in buffers.\n",-2);& I$ Y( ]7 e, s; m
    if (upp_interrupt_count == 2 && upp_error_count == 0)# _8 V4 e. x* C. q3 \
    {
3 R8 K2 r4 p* a6 X" w        for (i = 0; i<upp_frame_size; i++)& V1 ?9 r# ]9 Q5 {7 ?8 ]8 I
        {
# J1 z1 s* s( p3 |$ t$ C) C; _8 }            if (upp_buffer_a != upp_buffer_b)
3 L# m0 L" s2 k+ T) f; E3 ~! n- h* n            {$ u; ^5 f' l' T: `& E# |
                upp_error_count++;
: @' |& i5 p7 O$ z! t            }
% |* M( ^; t+ |. y1 M$ M* g        }  A* h* E! z+ E8 D/ \8 ~
    }
: r5 q' L1 ?  j- }- }4 `1 n$ i0 y
    /* 报告通信结果*/
$ ?# B2 U& R! X! M; z6 `    if(upp_error_count != 0)
6 ~- Y6 v: L# O2 T/ x        UARTprintf( "upp_error_count=%d\n",upp_error_count);
% h1 C& _* i( N; q7 u/ H$ p5 v9 q    else
& _9 ?3 s  N/ O        UARTPuts("uPP transfers complete!\n",-2);# j' q4 a6 n& R3 |1 e+ p) w2 J2 j1 U

' g( n0 V( Y5 ?    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
% p0 y4 f) {- ~  j    UARTGets(ch,2);+ @# k6 L' `) Q
    UARTPuts("\n", -2);
/ Q1 F& n; M% j" L  `) R! n* O( E$ _" q3 k5 a
    if(ch[0] == 'y')( j* |/ J6 r; n, g4 O
    {5 y7 l5 z% {! ~) E9 _6 w% O
        /*打印全部读到的数据*/
3 ^7 f) [/ o$ t8 t        for(i=0; i<upp_frame_size; )
: _4 {# E! x  Y0 c: A( J        {
/ p0 {! N; l7 S  Z            for(j=0; j<5; j++)
, Z! f$ [4 v7 [+ \+ {; `' m            {/ u+ j/ K5 h# P* Y( C
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
  C9 h" T0 Q+ E2 l( c                i++;+ J- L% t) O7 p) g9 |
                //if(i >= 4096)
3 \4 E$ v3 W5 @+ M* M1 w4 \, W                //    break;# e; j, @  X+ w- ~, F6 ^/ u9 N: |) m
* w  A# ~: a! V
            }. E, |. `+ _- p- G. X; r8 y
            UARTPuts("\n",-2);* i7 Z+ t9 T+ b* l
        }
' T- g3 g3 l; _4 h' G' F    }5 T0 d4 N, p* y6 n5 \1 L9 |0 M
0 Q. r' T6 V8 A- ?& l
}

' ]9 r9 z6 p- d5 Y! m
. e! y. A* H3 [& I2 k
$ ^7 \( |% R  I! m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
7 c( w) T2 |& S: @! Y, ]3 B6 \
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。& [4 d7 C& v# S. B
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 04:04 , Processed in 0.038905 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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