嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
! W+ `* M4 Z* l" `/ t" ]: h
Void UPP_TASK(Void)
$ P# C* D/ i5 E' `+ J9 }
{
( F$ e2 Z9 [' s) q/ I, ~
0 v( R' g7 o7 x6 n4 m
int i,j,k,target_int_count=2;
: Q O8 u5 O# R
char ch[2];
" I* J2 P$ y4 Q. V; @/ s& e9 S
8 u" R6 s+ ` L$ l9 w; K, x, {5 v# X' t
! x1 F3 _% T/ _+ r! `9 j
+ C! K6 `6 a g: z# \
upp_interrupt_count = 0;
p8 g0 A# [1 O* o6 }
upp_error_count = 0;
# c! K- Z1 V; K# g! L2 r
! ^6 x' z* b0 s0 n
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ G5 z% }, \+ V7 ^
// Initialize data buffers
4 L& v$ E2 i* |4 b
for (i = 0; i < upp_frame_size; i++)
4 v1 P" q# p& M3 w J( K
{
7 }7 |2 h8 v8 [$ V* a- g
upp_buffer_b
=i;
2 T/ J: _" g' c
upp_buffer_a
= 0xDEAD;
( I+ O8 ]* t8 l* b, R
}
* |% v p# E. g) B7 T7 f
3 M8 y; ~: D7 T# N+ \6 E2 O0 T9 q4 P
//for(i=0;i<1024;i++)
: X2 G. H) {8 I8 d4 V
// temp
=0;
# ~! B$ L0 n ~! H k+ M- E
7 |$ z- |& y0 o q
//UPPReset();
0 _+ j# x, n. e" @
/*启动UPP DMA传输*/
u* g- b6 G3 @' W O3 M/ l
UARTPuts("upp_prog_dma_i\n",-2);
* a; `/ w$ q' ~! e! X' {5 p
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 c. q' z8 C- J% a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ E: |& M- X! A, D
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 J# m" e. i9 @5 z9 V$ H
. F6 n/ s9 D9 v/ z9 v1 A. O5 F
UARTPuts("upp_prog_dma_i\n",-2);
1 U/ Y4 j; F: Y1 h% T, s# n: Q* f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! v/ ^3 B- e4 ]6 ]/ o) H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: z/ e1 E1 }% l4 d3 N$ S# H4 o- ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 o* k4 r% c5 _2 t5 t9 g. P# F. H
$ n4 y5 H& [4 |6 J: ~
/*等待UPP传输完毕*/
8 U6 h5 j" h9 x5 t
//i=0;
( y2 P+ v: N, M" ]' |. {! h9 J
//j=0;
" l( s0 j5 V; [/ D7 v, \9 d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( j1 g9 N0 d) A7 X
{
" j% n8 m/ s0 u4 N: r
/* 测试UPP传输的同时操作普通DDR数据
, G6 L- Q! ]* p9 E' c
temp
=i;
7 X' ]! K+ [7 Y0 v" `9 E# u: v
i++;
& L; y6 @$ F* W+ p% _. {, D$ ^
if(i==1024)
1 { ^# @! i/ @8 ~' m3 d. U
{
+ _6 y, ^! u1 E0 c" }3 ?4 Q7 d
i=0;
* G4 M; x/ K, s9 i
j++;
2 P+ a4 c* Y" h
}
) R, U- G0 L) g! Q* g9 t
*/
0 N8 o; ]- r9 \& X1 _# F
8 ~, B% v% P" C. c! {
asm(" nop");
6 t1 I( `' W! _, J8 o4 q9 N
" E: H: [6 n7 r/ m( `. X4 p2 v" C* }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# p- J4 _- R, @3 W& `5 N1 F! x
}
( j0 q: K/ n8 |/ @; R* s
' i& X ^' g+ r& X& `. `. z# A" c
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 ^1 T) a8 G5 S# |- z$ [6 k
//UARTprintf( "i=%d\n",i);
! a0 S% c. }/ V0 G) t
//UARTprintf( "j=%d\n",j);
$ b2 l) m. O2 X" n) w
UARTPuts("Data mismatch in buffers.\n",-2);
. G. ]7 Z. Z M! H7 l+ I
if (upp_interrupt_count == 2 && upp_error_count == 0)
: \4 ^- E5 d+ S. m/ w% r! x, W- x
{
% t' Z+ A" l" H* z
for (i = 0; i<upp_frame_size; i++)
: B+ C8 O4 J9 q% K) {( T% y
{
* Y8 N1 R4 {: C, @+ B/ O2 D
if (upp_buffer_a
!= upp_buffer_b
)
1 O& u! R; I# k: S: U y
{
" [$ t. D& S* Z9 A! ]
upp_error_count++;
7 W- o4 O" X# b: d3 ]& {
}
' C6 z$ s( P) ]3 a+ l% ]) N3 ~
}
) ^8 Z! x7 j: n8 W
}
' b" [6 a/ ? a# u+ |6 e5 _
8 Z" {0 E4 L7 u
/* 报告通信结果*/
, a4 h; X$ |2 i* k
if(upp_error_count != 0)
& \0 L- }8 ?4 Q! H0 o8 Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 A' o0 Z: D- D' I
else
- o# Y' f- t6 c9 `3 u$ j
UARTPuts("uPP transfers complete!\n",-2);
& V9 z4 ], Q2 E \
9 E7 j' ]8 L" ^7 k- l( {) c
UARTPuts("Do you want to print all the data?(y/n) ",-2);
+ q" p1 K. b/ V! X9 d5 }& Z7 q. t* f
UARTGets(ch,2);
% N/ Y' `1 ]: B; `0 ]- h: p
UARTPuts("\n", -2);
6 \ U* \) V' n# w5 r! N- M
# k5 y) ^4 {5 V& `
if(ch[0] == 'y')
" v! n: b# D1 o
{
4 p" I2 w+ Y$ C' N |+ G
/*打印全部读到的数据*/
; V5 v: {# r4 h* |' m0 l, h e
for(i=0; i<upp_frame_size; )
( |3 p" h$ R1 B3 x! o4 N
{
! v. l0 @7 ?7 o% S' i
for(j=0; j<5; j++)
) a: N2 q8 L# r# A( }' Z' Q2 i
{
6 B. ]) [; ~* R* n! ^. J# L! m0 C
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ d' U" ~% K: }3 V8 n J/ c
i++;
& e- E$ a6 C$ i
//if(i >= 4096)
" {/ W( z( ~7 R7 r3 p1 i! y; y6 R
// break;
2 E9 ]% m+ L' G' z. o1 W0 A
( j# f1 A. a+ q
}
- i S: \' p# {( K
UARTPuts("\n",-2);
( n5 y3 a- h B% ?" B% I
}
' M: x& \5 U6 Z- [
}
: [& L3 V* d! z( n# j; W: d
4 S/ k* C2 K8 t+ u" s
}
! V0 @# C" C$ s9 \
& a* @, {6 J- i" t! t* |5 R7 b9 k
. G8 G( g+ P8 g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
! A2 e/ A8 D: P" K9 M' Z) x
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 h* y3 _) K6 X
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4