嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- V% d- f0 l' e8 m" ^4 j4 m' x* ?
Void UPP_TASK(Void)
; e& W0 Q" ~& X# b$ S! \3 Q7 I3 O) M
{
* Q$ O' g" @+ ^+ {/ F" m6 F1 e
& l! c& `/ \6 T
int i,j,k,target_int_count=2;
G1 A- Q1 P1 Y' j4 [
char ch[2];
4 P, @7 N$ V. i# V1 ]
8 ?8 ]+ h; P' E$ E. l" `
( n! ^$ a7 H# \) l
1 w+ Q! a3 E& O, h
upp_interrupt_count = 0;
" c- o' P1 p4 l' `* H- h
upp_error_count = 0;
1 s- |6 a& n* y7 ^
; o9 @, N. B' G$ u
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 Q1 a9 a5 D' q7 t
// Initialize data buffers
7 o. ^/ F* H+ V; t' ~1 G
for (i = 0; i < upp_frame_size; i++)
9 k$ q% u/ Y9 h; R. v8 N# a
{
! l7 `9 O! ]6 O8 D$ P$ V, O6 g
upp_buffer_b
=i;
; [& |( U3 }& {' Q T
upp_buffer_a
= 0xDEAD;
% p- [: P; T1 P! |
}
1 h: i- S! ?$ _/ f+ k
p) p! w4 f& e: g- z3 M
//for(i=0;i<1024;i++)
$ B2 j) X& f9 d: \! p5 X7 I
// temp
=0;
6 B5 X0 m4 N! S; v; ^6 d5 M n! w" [" K
" S V5 F3 V/ ]8 {' k3 g) ]: u
//UPPReset();
! _. Y1 \* C$ k u5 k6 B
/*启动UPP DMA传输*/
9 w: |" I+ R* R8 e L. R
UARTPuts("upp_prog_dma_i\n",-2);
6 N" i% z, _( F* e# X, B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- g0 W, C/ ^; d. t
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ f" M/ j/ k5 ]" h* v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- ^- z! ?6 i' H9 W( N j/ q
+ Z; g0 K5 _- O
UARTPuts("upp_prog_dma_i\n",-2);
' e% C3 D4 b) k6 Y$ a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; ?1 s- _' ^; s* o) E$ F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* j" |! [4 p f9 U8 r/ W9 ^) s! S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" P: a" f" R x1 R6 @- m
* {: A3 K" y( q+ J
/*等待UPP传输完毕*/
0 L/ ? H; l0 A, P% x2 u. z z
//i=0;
9 h$ z+ E ~% s( [7 N/ {4 E
//j=0;
& @9 l4 z: o- R$ B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 o- s3 |" I {
{
1 E$ k8 U. [( ~' \! D2 d/ y
/* 测试UPP传输的同时操作普通DDR数据
- Y1 m0 t* D4 N8 L6 \
temp
=i;
4 h/ V" [3 ]% C z/ Y
i++;
# D% w" q: p% G0 n% |; Z
if(i==1024)
4 {2 e+ F% C0 L9 t+ j) ^. _
{
! J$ j7 G/ [( c+ m4 u$ L. O
i=0;
/ W* g( }8 `4 E! M# `4 Q6 e
j++;
) k1 q" R; k! P/ g- x/ }
}
. `: l7 L1 N% C- ~1 V9 w
*/
, I- u/ n8 B7 S1 E! a) i# h
1 ]% Y( g E2 A" l2 m( C
asm(" nop");
- Y/ \- M, a1 o3 X1 H9 w6 d3 R
! m; Q# P4 _1 S( S/ b2 a
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! |+ ` h* `9 c. d! \
}
- o; a: l+ E( b, W8 C
' s" h5 S# x2 k
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 n% w8 {, }" `; G3 u5 f2 ^
//UARTprintf( "i=%d\n",i);
: E1 {- i1 \( O+ ~6 B- y( S5 p0 _
//UARTprintf( "j=%d\n",j);
; u* {" K2 c* S4 J2 I5 e
UARTPuts("Data mismatch in buffers.\n",-2);
2 U! B% z) L; m1 i# K# [
if (upp_interrupt_count == 2 && upp_error_count == 0)
% L, a+ p: L: b1 T
{
% j0 d7 O" g5 c! F, Q1 _; V5 j
for (i = 0; i<upp_frame_size; i++)
3 O/ {( R7 _" M; E( g6 }
{
, h7 W7 T8 Z! {) U, A4 ]
if (upp_buffer_a
!= upp_buffer_b
)
7 K. q- P. w7 t/ \, _
{
8 q! I2 Q8 f3 h! D+ i
upp_error_count++;
% f& i- d2 H( C6 a9 j1 x) L7 V
}
$ R% f8 F7 u& Z. t0 d1 m/ p6 D
}
. c/ k: w& m% }+ x) L" N9 J& q
}
9 \( s4 t7 ]- D2 l* d
2 w4 D) \5 k2 f! M v5 j
/* 报告通信结果*/
0 u8 h$ H1 `8 q# r9 {
if(upp_error_count != 0)
: x- Q9 |0 X1 \" G/ r
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: ?! t. S8 X) N3 n# Q& h: h
else
: a6 E$ e6 }/ D) X
UARTPuts("uPP transfers complete!\n",-2);
" A8 c2 ]- \7 c# b5 ?# S
9 j6 s: l: z$ T4 p7 W# @: Y0 i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 w1 N% b0 e5 k
UARTGets(ch,2);
' |# j- R/ Y* W7 m- w6 g
UARTPuts("\n", -2);
8 [/ m, I+ h2 ~' v# n
& u8 B% h2 |; G, C/ y" U
if(ch[0] == 'y')
8 n( m! d1 z% m1 i C
{
6 ?. ~1 y9 l9 v& y. a/ M0 a
/*打印全部读到的数据*/
s6 l% t3 C6 m h( q
for(i=0; i<upp_frame_size; )
7 }8 d( S/ N( a0 q
{
, A6 `7 r2 H3 F, n
for(j=0; j<5; j++)
& N7 A6 L0 G5 S) g0 D) O
{
! q4 O' i( `" o8 F% s
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ W: }5 e9 a' ^( U
i++;
+ c9 F2 O9 b& y! ^# @' c
//if(i >= 4096)
( D: o" Y- \7 J& c% |9 y* }
// break;
- F k( P! q, L2 X* n
9 x! a# Y( H& @: [& K$ l! R
}
3 a) r$ ]6 }3 s3 P
UARTPuts("\n",-2);
1 R. ]' T+ Q4 }) z
}
% M5 m* I1 g: Q- t. E5 ?1 h
}
" M- H0 p9 Q) r; s- m# I J
- }' v9 L/ i$ N z1 s9 n0 d
}
: ]4 `/ P3 r. {9 t! N& w* I
* \# r+ ]2 C% X* b' |
" a; Z; q! s7 ~- X
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% i2 U3 @) D2 @2 O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ d6 T+ C; T7 V) k% L+ L4 e
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4