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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 R" V: V/ }6 B) U; S0 ?
Void UPP_TASK(Void)
& Y6 O5 x* M- B  i' [{
; l- p/ H0 y! Q  c& Y
/ b6 W5 M2 D& y8 p5 v2 L    int i,j,k,target_int_count=2;
7 u* V; ?' M- L5 S& r+ A: A* a    char ch[2];
3 w. I% o6 W2 h' G
: f" F3 V6 @1 h6 f# K
7 U: @) G1 B) B" S% S1 p1 q+ r. Z1 C$ ]# s( S; M5 i
    upp_interrupt_count  = 0;. }2 _  a) O3 f5 ]2 |1 G" g, E
    upp_error_count = 0;# u) Y" v2 U# M$ K0 Q, Z
+ m8 C: T, Q8 K  x' @
    UARTPuts("\tResetting uPP buffers...\r\n",-2);1 `7 r# ^  b  n1 Q' j4 ]
    // Initialize data buffers# ]4 ?$ u* k) |3 w1 n" R1 r
    for (i = 0; i < upp_frame_size; i++)* N% T$ t- O2 A4 x8 X" q
    {6 O0 F' w4 F2 @4 F% e
       upp_buffer_b =i;( _, `# h, s9 k- ~& F; Y) O
       upp_buffer_a = 0xDEAD;: B0 Z9 O/ D! K% e. E8 Q4 X
    }
; F8 Y3 A# U6 F8 {5 q
# R+ p* r" }( h7 |0 A7 |    //for(i=0;i<1024;i++)
1 }/ R! Z, m" h' ^    //    temp=0;$ m4 M( C9 S+ e; ~+ u2 z

1 {; d# G& c0 [$ C3 ?/ \9 C$ t    //UPPReset();* p4 V  n/ S# I, f: T4 }
    /*启动UPP DMA传输*/* S2 z$ u2 m* c+ L8 n1 v
    UARTPuts("upp_prog_dma_i\n",-2);' t' H) X  F2 s# f: c" Y8 J1 @) `
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;; G  ]; f7 }, q1 W* m. ~
    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 m0 j7 t8 Y- d$ O! k( N    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);9 `- H) L- I% |; G" ?9 i( G; T. p

0 R0 v7 C) f" z# {$ I4 I    UARTPuts("upp_prog_dma_i\n",-2);
8 X* E* S- k* P8 E/ H# l. m2 M    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, X1 G2 g" F+ v: c4 G  v    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);! n2 e- y# W0 ]* L6 z
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);# V5 L% n/ G4 E- @+ A5 v
# ^& f- }- \: e
    /*等待UPP传输完毕*/3 F) ?1 ?3 F, y8 v7 ?1 m
    //i=0;
5 L) Z5 |& V' F, u" a8 E    //j=0;
+ \$ f7 G" h5 r0 m9 C    while (upp_interrupt_count < target_int_count && upp_error_count == 0)/ U* s1 ?& k# q& _8 l$ P  V* L
    {
% Q$ o3 h9 M9 B0 ~2 p- c( _( u        /*  测试UPP传输的同时操作普通DDR数据3 R$ ^2 L, p0 X% U5 H. m
        temp=i;
. L, d6 ]3 Q1 {        i++;4 M& D3 ~- c: l9 e  j
        if(i==1024)
. }7 v4 A* a. _! ~& E: z0 D        {
: T5 h& r+ v0 F; C5 R# @            i=0;4 `' R: p; c8 w& Q% t" ]
            j++;) |$ e' T- P* W4 N! X! ]2 F4 A6 c
        }
( D% [. D' E4 Q3 `: H; {        *// ^3 H. b  R( Y) D

! u6 H( A3 j7 {2 f9 s) Q- z# N5 ]% G4 h5 Y       asm(" nop");
( P/ f: ]$ M9 a1 x9 b) U& m, |! {6 N$ p
       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);9 P) `0 h( I' G
    }
9 ?. M" Y/ U9 B# `) m! I+ @7 ^; G) H5 N, q
    /*检查UPP传输的数据是否正确 (loopback modes only)*/
2 N; b2 h- H8 m; f    //UARTprintf( "i=%d\n",i);3 x9 Y! y5 _' o' H
    //UARTprintf( "j=%d\n",j);
' K) p; L. v- m% a0 O3 W8 E/ V8 L    UARTPuts("Data mismatch in buffers.\n",-2);
. ]) a9 D# w5 L) ]. y    if (upp_interrupt_count == 2 && upp_error_count == 0). c1 O; E6 I' f2 i: P: A3 W( x
    {
" h3 w4 S5 m$ y4 q& t        for (i = 0; i<upp_frame_size; i++)
# ^1 g- E! i) U        {' p0 m/ v. ^% I/ M' y1 r
            if (upp_buffer_a != upp_buffer_b)
1 L' J+ K0 s. Y7 v            {
- {! |  v0 ~: R8 V- @. P! Y! y                upp_error_count++;5 d; w6 ~1 B& F1 A; s  W
            }# n, A" R% p2 I  D
        }
0 L/ C/ W! @* `# I1 g    }
1 e) ]3 s* {, m8 q* D5 O5 F' J; X" _+ i/ O! z
    /* 报告通信结果*/
9 M/ W6 d% Q5 Z4 W    if(upp_error_count != 0)" L: G5 i8 }2 E, d5 K9 C1 O2 U
        UARTprintf( "upp_error_count=%d\n",upp_error_count);
( [/ t% J. M( q7 v, |& v4 _    else7 e0 }# [) k3 {4 |; y7 z
        UARTPuts("uPP transfers complete!\n",-2);; [$ f; m4 |0 ?  o8 C" S

3 q, u: f8 Z% a2 I3 I    UARTPuts("Do you want to print all the data?(y/n)   ",-2);8 L1 }- P1 Y/ R( C& |( e
    UARTGets(ch,2);* C2 A. d% W7 [/ z" ]: i$ p
    UARTPuts("\n", -2);+ N4 q+ Q; G9 Y) l

0 Q* r) U/ n, A, o* v2 }    if(ch[0] == 'y'); C0 E1 D3 V2 \0 M
    {/ ?* L  ^$ z6 ]0 u7 [
        /*打印全部读到的数据*/8 E$ l5 W- h! ]+ h
        for(i=0; i<upp_frame_size; )$ X( ]$ c2 Q* b
        {
% G7 V# t6 G2 C5 F6 n            for(j=0; j<5; j++)
2 H6 U+ `  ]1 G            {
9 y7 n1 n* |. b- r2 K, U. v; Z+ @                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);' R8 }) k/ }6 P  h# P0 `
                i++;
4 ^+ d  E1 C2 b- S- B# c                //if(i >= 4096)7 Q( K/ ^! b1 r  ?
                //    break;
. A% Y- ?* U) Z
* A' R, O- G0 \# e+ f7 S            }. C5 b" X. H/ m+ `5 h
            UARTPuts("\n",-2);& T/ C- @9 l1 F; }: C
        }' w0 j: f- t6 H' J/ S* v
    }
1 m  ]4 X% s  U  n' Z7 V8 O, f. y* _0 m( `
}
  f" I3 \0 _5 Q( a" v; ~: b1 a. ]
1 J# M, ^! ?. j
( P2 @  m$ c' H, n. s  m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ n  s0 ^: L& o# D+ i- p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
4 h0 p& \: ]; W2 F" D- w+ [
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-21 06:07 , Processed in 0.040875 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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