嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( a5 w. S1 {) {' i7 {: |9 l
Void UPP_TASK(Void)
1 b( T" x. F1 z
{
) v; t/ E, `. T) {9 o) f) l
# i: ]& }! v7 g
int i,j,k,target_int_count=2;
2 U5 r* `; N% @
char ch[2];
0 k! x1 }; X: h1 c+ C7 `
5 S( l: _- X6 P# P
3 y1 H; w& @/ B M7 i$ u
2 w! Q4 N2 r5 T0 X: b: s
upp_interrupt_count = 0;
4 | u: M* D! z$ W$ g. r* r9 @
upp_error_count = 0;
/ ^8 b% i4 \9 \' L
5 X' Y8 h5 u) X8 W/ O
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 {8 X. U% q5 W: Z, o
// Initialize data buffers
- ~6 O$ N+ U9 R
for (i = 0; i < upp_frame_size; i++)
: \# u. b" k' f3 [( M
{
. ?# Q/ v- U7 T/ I
upp_buffer_b
=i;
6 l/ h5 M2 C& l: u) ?
upp_buffer_a
= 0xDEAD;
- ]6 f0 f. i; T0 F
}
% {1 X7 O9 M: c: |# C: M
% d" z" t0 W* ~9 i' i
//for(i=0;i<1024;i++)
* z- z% ?, ]: `1 R9 }% A0 P
// temp
=0;
$ B" H5 G) h: I( J9 f7 M, l F
% |- u; W. A, n; g4 z+ ?
//UPPReset();
W0 I5 j6 V$ `, c
/*启动UPP DMA传输*/
- D; r5 ?( P4 d
UARTPuts("upp_prog_dma_i\n",-2);
# S' S8 f$ x9 p k* u* v' c/ N; U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 r X# c% v# g: F5 C
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* E( s3 Z* R, R" ^6 i0 l2 V
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ ~' k8 q. | y" e/ c0 W: i5 ^- _' q
" f9 \- v& T- R1 Y& x. U
UARTPuts("upp_prog_dma_i\n",-2);
P: X0 l4 |( p; X# ~
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" B# r- p) z) m$ ^8 W' G1 E, B
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 A f" r- c4 r0 t' a8 e- @% o3 }3 B
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- e3 G# I! K0 R. k/ D- \
2 Q8 H i7 x5 @3 P8 d. [
/*等待UPP传输完毕*/
- m& n6 w8 g' h# g, j: j
//i=0;
) \2 o. k( o3 g ~: e( X
//j=0;
3 @% v* h, q8 V N% n
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' Z3 ?% L0 E e& {! e
{
- W) j) l" K3 P& }1 c: ]7 D
/* 测试UPP传输的同时操作普通DDR数据
/ ?8 ~, }; R/ o6 j. h& i
temp
=i;
0 V% N7 U0 l5 p [7 x- U
i++;
$ c) @2 E9 K) ]+ B: ]
if(i==1024)
/ q# C0 ?* C% B0 d
{
* h/ `, o% O( |+ U9 B
i=0;
% X. N7 c2 B! x7 q8 t
j++;
5 r6 j' i6 a* }1 T+ D
}
/ T9 [# J) m9 r! a+ W" \
*/
* a* M( [# \! h4 B4 p }
; ~: V5 t$ c4 y# b
asm(" nop");
6 F! [/ [( @( Y% w9 K2 v, v' [) B
1 X4 T4 y7 w6 D) u6 C# n" i, |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 B' ~- D: q# k3 R7 E
}
' K$ J8 W0 ?% x2 Q8 m, T+ V* e0 T4 |$ q8 y
! G4 B6 ^* ~0 C' I3 |- e5 _! v
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ T @) n1 O1 u& }5 I- b& {* M- C
//UARTprintf( "i=%d\n",i);
* T. k0 U& M, J9 g% s' y
//UARTprintf( "j=%d\n",j);
1 B5 S( z! o0 i4 E+ w% V5 e# b" ?
UARTPuts("Data mismatch in buffers.\n",-2);
7 ~) L, [3 W4 M: X- U
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 T- M" Q3 D8 p( L
{
9 u" s/ V9 r0 h. m. F- f- ^
for (i = 0; i<upp_frame_size; i++)
3 y6 Z2 u/ R$ R! a; D6 [1 m9 c
{
- F% x/ F; v9 y/ W. x% g$ Q
if (upp_buffer_a
!= upp_buffer_b
)
' ` K; v0 w7 y' U+ L1 t
{
2 O1 {6 ^, f) o. T
upp_error_count++;
4 Z4 V1 N1 G, L6 j, {
}
/ @7 _6 m* V6 o# D0 l+ g
}
/ N- ~: D8 n! i4 s8 i% U
}
0 h. y: u4 q% R5 l2 ^6 w# h R
" v: Z+ S. ] n4 o& y) p( m! j5 v
/* 报告通信结果*/
! j( M$ d, L) W
if(upp_error_count != 0)
i3 w5 |& H3 d& [: \# y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 G8 i& F! w* S, u0 h! h
else
T7 z' k3 m9 s0 _
UARTPuts("uPP transfers complete!\n",-2);
" ^$ u) o0 ]) | Q3 F) q& i+ z
4 R7 N- s8 `8 w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* S8 ^$ p$ e! I: f) G* K# _+ _( r
UARTGets(ch,2);
+ @& p, t" b6 z! `+ N! p0 c
UARTPuts("\n", -2);
4 R& L: r1 N0 k. R, v5 j
8 U4 L6 z- P" e1 s8 ? d& s2 \
if(ch[0] == 'y')
4 u2 W6 q4 m* p6 r @
{
8 J* N+ ^' \: z7 U/ d: r N
/*打印全部读到的数据*/
3 s6 Q" N) [" G5 O
for(i=0; i<upp_frame_size; )
/ q$ x3 \6 h* F( z1 D) K" z( c
{
; D8 t f* c/ F* ^# q8 N
for(j=0; j<5; j++)
. L* k' R, ]: o8 f& Q; G) F* R
{
: ?+ U2 N& ?) B5 ?! a6 X& N0 r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: h3 _8 L2 G/ C3 R5 l1 m
i++;
( w& @& B5 g) u0 y9 o3 s
//if(i >= 4096)
1 J9 R5 A& V+ R) U q6 s
// break;
% R& x1 L0 |0 N7 U- h% b7 V! r, g J
+ b9 h1 m( K( H( j1 h
}
' V- @$ P+ u6 K# ~
UARTPuts("\n",-2);
7 ?& m) p! q" X; A1 R0 q# @1 l
}
; t% Y4 q& P$ h x8 M
}
! R2 k8 M- K, r G! H
8 g( m7 C8 y3 @& e0 t; h! Q
}
x8 q+ H, U6 k4 L
6 r7 U% K: Z+ c3 H& a
1 z, G- H7 w# ?# d- k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' p8 h# g/ i' X( n- g" r( u- h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, a2 G: @7 T# v! q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4