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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?! z8 k5 Q4 W/ H% ]. J) t7 @
Void UPP_TASK(Void)* m( q% {4 Z4 K# F
{
5 G3 U7 c, h( N% \- d  `" C; e1 P6 i  |1 B7 o1 X& b$ m
    int i,j,k,target_int_count=2;
9 j6 M1 p" \* r, ?. P8 u  w( _    char ch[2];1 T- U4 D8 o3 t) j0 O0 b5 ~0 ]4 ?
2 R; d, g' P; @  P/ ?2 O. X

( T  h/ `4 ?8 j7 r. @( V% D- e; W+ z% G8 P
    upp_interrupt_count  = 0;
  Z+ M! u" a) {6 U3 i' R. b& J) k    upp_error_count = 0;
" V$ ~0 c: r( j; D6 M1 _0 n) Q/ R+ W+ K2 m! }- k/ ]! L( n+ G$ V) M
    UARTPuts("\tResetting uPP buffers...\r\n",-2);
$ p' L" n3 I: w$ e. V9 g/ ~    // Initialize data buffers( k# u( ]4 E- A" N  Z
    for (i = 0; i < upp_frame_size; i++)
1 |9 R, l  F: q: p7 J: S    {& q3 m6 D/ W5 f  Z
       upp_buffer_b =i;& n' I( y! i) Y* ?
       upp_buffer_a = 0xDEAD;% r6 w) d" R0 C" w3 I3 ~+ {( {+ [
    }2 Y9 n9 x! c& \' I1 w. y
( q6 m5 w- p% X7 s- T
    //for(i=0;i<1024;i++)
& G* i0 J' Q+ @7 F+ E+ C    //    temp=0;& N, r2 m: {) N2 w0 D7 j

" }1 n+ G- o: T  c& q2 o1 @: y    //UPPReset();: O' l/ z" e7 \5 |9 W* Y( {
    /*启动UPP DMA传输*/. [" e) O, _6 I9 z# W
    UARTPuts("upp_prog_dma_i\n",-2);, B0 T% ~$ m: V; X4 S
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 @2 E) B& m* ~    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 G5 K9 a9 X6 m) _" C    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);$ J! }2 f" B2 h% d+ _2 O

8 Y3 N6 n; B: W" m% {" h  X    UARTPuts("upp_prog_dma_i\n",-2);
4 K5 t+ y: t& {    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
) `8 _3 E' h( b1 n    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 s8 m: [4 i4 b' [    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 V3 O% D* s7 b5 \5 o' u  Q7 u  R* W3 {, k# g7 H
    /*等待UPP传输完毕*/% t! C) A3 D* N- @. s; z% A5 S
    //i=0;
; {5 j5 P- B# S( y, Z, T: H' K& W5 Z    //j=0;' }. x% H$ i% ~7 X# V
    while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 R. J( H7 x5 a* ]) k4 N9 q5 _    {
! Z+ F# F0 N9 o/ c        /*  测试UPP传输的同时操作普通DDR数据3 G, P7 ?7 T7 K2 U" |6 |+ m
        temp=i;2 v  w+ s8 w1 x" O6 B8 N
        i++;
* L5 G/ I; |- Z7 c        if(i==1024)
- E  @* I  v, l1 }        {; T# U3 x- l$ e
            i=0;1 a4 U0 B% W6 R; D' }5 E, }
            j++;
8 C6 Y; A. l; v4 d( G        }+ K, `$ @) Q7 O1 N7 R
        */
4 h9 s6 t/ s, ], O" s5 n
  J; P) A  n6 l  S6 r! W       asm(" nop");
/ T4 ?" z6 i+ I
( I4 c; ]0 D/ S) X/ ^7 Y       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);2 u7 O+ V" l8 k& M: f7 J
    }* L/ l' Q9 F& k% }2 g! y2 F7 a. h
5 Z8 p- n! R7 @. Q' D$ s3 M) q0 l
    /*检查UPP传输的数据是否正确 (loopback modes only)*/* D3 _) _8 V: ?9 L3 I9 n% K$ I, [
    //UARTprintf( "i=%d\n",i);
4 ]7 y. h  V8 a1 u, k    //UARTprintf( "j=%d\n",j);
. F$ |% [# ?0 ^- i+ C( ]    UARTPuts("Data mismatch in buffers.\n",-2);
# @& f+ K+ O. ~/ H" b- J    if (upp_interrupt_count == 2 && upp_error_count == 0)
2 g7 i% t" ~/ l) x$ b. z    {
7 D. v$ h& J" U/ g- z        for (i = 0; i<upp_frame_size; i++)& Q/ M5 r- c$ y/ d
        {
( _. {* M1 q1 p0 Y            if (upp_buffer_a != upp_buffer_b)
% i8 `+ ]( z6 t: {9 ~            {
8 Q% P1 f# n' g; T% ]) I9 t                upp_error_count++;/ q" F' {3 X8 m- M
            }- \# @- Y8 d& O* k& l
        }  B5 e7 R* U3 ^9 c0 ~
    }( T3 B8 F- |3 ^7 W) P

4 g: Z9 e/ j& f7 z3 \/ v% S  G    /* 报告通信结果*/
* e$ e3 Z* q9 Y0 h    if(upp_error_count != 0)
% Q6 I/ x  b6 g/ x, _0 @+ w; f' V        UARTprintf( "upp_error_count=%d\n",upp_error_count);
" [8 \7 _* e, L6 W" J; C    else* U% C* L' o% E8 h2 D- s
        UARTPuts("uPP transfers complete!\n",-2);
8 N; l( z3 |  [; s' I6 ?! c) U/ b5 ?* q: m9 e) a
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);' E/ v# D  h1 D0 ^/ _4 O4 C
    UARTGets(ch,2);
" K1 i) G# t8 m8 `+ \! `* ^    UARTPuts("\n", -2);. {& g+ J7 Z2 r8 x/ D
& l0 R# c, i3 @+ ~9 `' l
    if(ch[0] == 'y')+ Y$ U" _1 u& C" H! v  g, G
    {* t; {1 r- Q* G/ Z1 R& ?! j
        /*打印全部读到的数据*/+ B2 L; f9 K9 \  w. e: H
        for(i=0; i<upp_frame_size; )" M9 K+ V3 j# C" J1 u: r5 e
        {
3 u& Y; M# q& Y, V            for(j=0; j<5; j++)7 u! b& O( H* @& ~, a6 l- o+ Z$ C
            {. I# x2 o. R1 v' _: z" ~
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);" I; ~( ^  x& h- y
                i++;
. q5 y0 D. t, M4 `" L; p                //if(i >= 4096)3 C: a; z0 n( D, o- C* [) q
                //    break;
5 h1 I& ~9 M( n5 N
+ t/ ?! [% K' o5 G            }4 X% D6 @; z9 Y- `: c
            UARTPuts("\n",-2);
+ Z# d* R$ ?8 G6 J/ q: n9 w) z( I        }
8 A. n4 k# B/ R9 A    }3 W# R6 Z0 B. c( t4 L8 R5 H

) y' ]9 V% }( Z}
8 t- x$ ~; d7 S8 H) l
* {# V/ i- w0 |; M1 |: p' B

  E& L+ u6 {+ y0 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。* x9 |) T" @' R/ t% ^
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。, _/ A- F% E- m6 K7 ^
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-16 15:31 , Processed in 0.038959 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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