嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. o7 M1 `% D7 S. j# j
Void UPP_TASK(Void)
% n: d/ n/ T! l/ ]7 K% X6 v
{
& |* r/ i2 F, }9 m: U' R
h8 t3 D4 a3 f& z- t
int i,j,k,target_int_count=2;
9 I/ ?& A" \- K2 v0 O% e6 @
char ch[2];
- }+ T0 N w5 Z3 y5 C& v
2 M+ h' v, X/ `8 _% V `
1 S# t' p- l- n
7 [. g/ g3 z5 b' `
upp_interrupt_count = 0;
4 T ]8 f( K Q8 V O
upp_error_count = 0;
1 e p9 u+ g3 E. U7 m% u
; O. J' |0 {4 A* i% { d. a. Y1 H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 O9 c% x* ]# X
// Initialize data buffers
9 J6 o+ q/ b/ W, n! R8 U
for (i = 0; i < upp_frame_size; i++)
- E2 g7 k) \/ F8 n$ P3 u1 ?' H+ F
{
" N/ f& I3 Y# h/ u, G
upp_buffer_b
=i;
: P0 I' f Z2 N: W* K
upp_buffer_a
= 0xDEAD;
! Z5 w9 D* K o) O& W3 @
}
. j. Q) D5 C, k' P
5 K$ v+ a+ v6 \. U
//for(i=0;i<1024;i++)
; ?8 ~* s0 z0 G7 J# \
// temp
=0;
5 A9 `7 Q" o7 F( g
' m9 _" H$ F# @8 Y, V7 }, C: v
//UPPReset();
5 D" @$ p5 g, w* ?# `! D1 v/ h
/*启动UPP DMA传输*/
3 S: U5 G, S" ~' y8 R6 w/ j
UARTPuts("upp_prog_dma_i\n",-2);
) F3 ~4 H/ b% t& c! m7 {7 p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
0 P$ \2 e0 ~; b: U8 R1 F9 S( J. f* c9 U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ }/ B6 X7 T4 F: C/ ?0 E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 n0 a' s; e3 n: P
3 {' Q) L/ ]8 n8 Z: @7 R8 x
UARTPuts("upp_prog_dma_i\n",-2);
n' s' O* e* }" M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% p5 ^0 A2 H5 a5 S2 N+ T* ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. v. ~8 V# q( w/ f! }- w
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 S0 v$ j; O1 e! G% J2 l% b
1 z* ^! Y; t' u/ H
/*等待UPP传输完毕*/
) d7 c& ^% o% ?" N1 L4 C
//i=0;
* I6 l) r& S" R( i* z
//j=0;
p( @' T. ?, B: w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
, H* z' V: q, g& q9 Q
{
# F0 X* m" I. N& `3 |! E0 d. w
/* 测试UPP传输的同时操作普通DDR数据
% L: d+ t2 I& X' o- g$ W7 C9 c
temp
=i;
8 e( `0 x$ s. }* o
i++;
: g" ?6 ~ N( N3 @
if(i==1024)
) A8 w! v _* a" e' r. J
{
: O" l8 J. L- X( y
i=0;
" I, V/ P4 E2 D/ S: y
j++;
2 r8 {, k9 j5 ]* h/ X: v: U
}
& z5 n& n1 ^- _
*/
/ ] \4 ?- K! c
# S7 P/ A3 M+ G/ u/ c# j
asm(" nop");
0 i% P2 ? D% f" ^" C+ ?% t7 H
0 P# n N* K7 v, Y1 C0 Y6 i
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ E) ~) z' S, J! h1 B2 z" y
}
( E' P) {9 I( m9 T1 Q$ B
8 k" h/ X r R
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" A7 @% U% o! T% |, x4 N) q
//UARTprintf( "i=%d\n",i);
/ L3 q7 L% d6 y4 ?6 x- S
//UARTprintf( "j=%d\n",j);
2 l$ ~$ n- T# ?
UARTPuts("Data mismatch in buffers.\n",-2);
0 g$ m+ k, A$ L* A$ N8 h
if (upp_interrupt_count == 2 && upp_error_count == 0)
% K6 U# Q! E2 n5 e3 s2 X
{
. R4 T6 U7 G: [2 |! y8 e
for (i = 0; i<upp_frame_size; i++)
2 }4 v0 ~4 U$ U0 D% ]
{
" e' M1 m! T6 N9 ?) W
if (upp_buffer_a
!= upp_buffer_b
)
/ |( K% @* t8 Y
{
z3 i5 n7 i% Z0 r
upp_error_count++;
7 a" H/ T/ W; E7 a
}
3 c8 N7 ~6 o2 [
}
3 s$ S& ?+ v+ z
}
- K: V+ H0 z1 {7 E0 @# i
* O+ L: K% ^' V- ~$ P
/* 报告通信结果*/
$ w' b) `' T1 k7 e8 A
if(upp_error_count != 0)
# a/ s+ ^$ O7 P9 ~' \3 e% S
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ E) r; W' q `. T7 Q! C5 Z
else
+ Q x l% Z2 E4 b" L6 n/ D4 M0 V
UARTPuts("uPP transfers complete!\n",-2);
) X% Z# K6 X8 J4 `4 t. @
) w! T' P+ ^2 s" n* t
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- t, J! P+ U! R9 C
UARTGets(ch,2);
- _3 r2 I3 Q4 z( x; }3 N/ }
UARTPuts("\n", -2);
' h5 ~; b! {3 g( h1 g, M
" M+ R' @! K! H Y3 V
if(ch[0] == 'y')
% ^! x0 X9 g2 u- N6 L
{
. f* |! [0 [7 H
/*打印全部读到的数据*/
; @" C ~& A2 a. c
for(i=0; i<upp_frame_size; )
" `% }5 U) G1 L" @- N
{
: [4 ]2 s) R: a1 Y
for(j=0; j<5; j++)
* [/ @# }+ C# Z" \
{
% U3 f+ r! w/ t; G! z" z; \* A$ F# J
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# t# j1 s( A- [9 |! v
i++;
, a' z7 |) Q- X$ |( X/ O' ]
//if(i >= 4096)
, \- a, O" \' u) t" [! }8 b
// break;
% r: R3 N; _" }; N
6 K0 ~ A: R. l1 k" P2 j
}
; h+ g; u0 z0 D. y5 j
UARTPuts("\n",-2);
9 {2 f+ E" n2 O/ q& g
}
7 h# c# b j/ U3 ~
}
0 f0 J* {7 m/ k/ z% y8 W
4 i' Z3 D& Y/ z' [3 }9 t
}
6 Z. H ^- h5 e7 J8 |( v8 |
e) A/ C8 h1 y: ?$ D, D
0 F! z* p: A: m/ E
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 W4 s+ P: C5 \, G7 g0 T' Z5 @5 d
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
R$ V; v5 F6 D4 y. L! ^- U. G
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4