嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ Y- I E, X/ I6 P; h5 M) b
Void UPP_TASK(Void)
3 E; `9 @, o* S$ ]- E
{
; y8 Z) H5 a, s% d0 ^( l% H
, S/ ] q/ O4 C6 J. |7 F% l! q* y
int i,j,k,target_int_count=2;
$ \8 O# ~2 X' V0 U: y" ]! q6 T$ I
char ch[2];
. f6 z' l) ~5 }+ w. j/ {
0 l# {: a0 ^1 _6 X: x; ~
7 Z" R3 o: v( z; r' N+ T! {
4 p* g6 E- m C) [: I
upp_interrupt_count = 0;
7 C) Y6 c$ ^- q) _; x' S
upp_error_count = 0;
2 h) E2 S! W0 s! Z
' t" x: e" O; T! Y* @( I
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* j. ?$ P/ B; ^6 F( w
// Initialize data buffers
! N# U0 M/ L! a! ?! T
for (i = 0; i < upp_frame_size; i++)
1 y6 c7 q- ~8 Z. D% h. p
{
. v! G' f6 Y) X% v. Z3 S9 T- `
upp_buffer_b
=i;
3 S; C- M: I: K- u6 O$ K, d0 F% M
upp_buffer_a
= 0xDEAD;
q( X$ |) l9 H* a2 m& H
}
# X1 B; F3 b. l8 a" ]6 }
( \& b; N' u W( j+ B, H' A' q
//for(i=0;i<1024;i++)
, n5 T% Q! ]6 k* j( q: \$ L
// temp
=0;
. Q1 B9 A# S7 K+ R3 X2 I
$ u4 Q) y- E+ }
//UPPReset();
( T1 }$ Z4 C! l) d8 |
/*启动UPP DMA传输*/
5 E( f0 @0 V. L% y* L
UARTPuts("upp_prog_dma_i\n",-2);
3 X4 U; |3 h$ M* I5 s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 U3 N( v$ n% E! z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, ]8 k( o/ k) M! h
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; S+ q1 Q* f+ y2 p
. M' L0 p8 W, {4 y+ O k
UARTPuts("upp_prog_dma_i\n",-2);
2 D9 ?( K" b) R2 L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- U( h$ q$ E( F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: _# z! g9 G7 y; j1 n. h: \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 g$ N( u( s! |! d7 g
4 Z" V G8 _1 Q
/*等待UPP传输完毕*/
2 E1 i$ ?0 H8 d- I, ^1 b
//i=0;
! i' k/ J1 B1 U; W9 r4 D
//j=0;
9 _% M0 u0 r5 D u- x" v/ e
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( y5 T5 W, r6 U8 L5 n8 v
{
1 r; g/ o+ R% `& ~" S
/* 测试UPP传输的同时操作普通DDR数据
# g, J- [9 @& R6 H# `
temp
=i;
) n6 s, M' C& S4 w( E
i++;
% J2 h/ S) A, N& ^4 O8 M2 q6 J
if(i==1024)
7 F$ @4 L8 c1 Y
{
& H F4 z4 e+ a& g9 |- ~& {- }
i=0;
0 L" b4 o8 D6 `, Z! u% G2 j
j++;
+ ~0 u7 U; m5 [* O; P' v
}
( o0 H( `1 i6 o0 p! W% D
*/
. O& g! u Z% e* R
2 c, g2 g, R! i/ X" p
asm(" nop");
+ t6 j4 U5 E- P. H& _. p. s
4 b7 {& |, l _7 X. T' }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
0 U2 J: u: n; F* B2 n+ @7 ^2 q& Q
}
6 O- v! F3 l( z! M! I
; T7 N2 c5 K O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 W' s! l$ }5 B! a, Q
//UARTprintf( "i=%d\n",i);
: `+ m! m3 H' V& V) T, |' `# c9 R8 L
//UARTprintf( "j=%d\n",j);
4 [4 ^& s2 O( K
UARTPuts("Data mismatch in buffers.\n",-2);
+ l" y6 R+ K t6 Y0 P
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ u, ?4 d, ]# h, u
{
" }9 W% Y% ~. p$ {% \* ~
for (i = 0; i<upp_frame_size; i++)
( h$ g6 N, H- k$ ?5 l* u6 \% g
{
5 r; J J% u6 R/ ^
if (upp_buffer_a
!= upp_buffer_b
)
+ s5 H! ^$ q! t; F. i# S8 S
{
, l% ?1 P" Z# v3 R+ W. b/ n. `( k
upp_error_count++;
7 _0 {# x4 X* q9 p
}
M; b! T# a* u7 C
}
( [5 ?8 _9 h4 D% q+ P
}
- D. \# T2 G" A/ o5 \* f
( c; ?8 Z4 T0 \8 o8 b0 j
/* 报告通信结果*/
/ F9 U8 ?, U; {' n
if(upp_error_count != 0)
$ a$ X% _" y' o+ F7 l
UARTprintf( "upp_error_count=%d\n",upp_error_count);
/ I5 Z e; q* u6 Q9 }* r9 @; _
else
4 ?4 L1 m! h) e8 E$ A6 y8 |; K' {
UARTPuts("uPP transfers complete!\n",-2);
! m' s- W2 a5 d8 D4 F; T1 ^
; R! E( ]( R1 C& j5 S
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- f6 s, [! E, l3 B- m. u7 [
UARTGets(ch,2);
! k' }5 u o: l3 E- q, U
UARTPuts("\n", -2);
% _: {' B B s& u1 q3 ^! J# f$ c& @
, G9 c# a( O: ^1 u3 q( r
if(ch[0] == 'y')
" u( ]+ j8 b( n' p! N& {/ e9 z
{
& j9 r7 e. b4 }' {, k. e6 K) g9 K
/*打印全部读到的数据*/
' [$ P' U6 k2 u! T9 X! P* u
for(i=0; i<upp_frame_size; )
" R; f' {& }. X/ z- g
{
" l* S- q9 ^0 X' l h9 U
for(j=0; j<5; j++)
3 i2 q* i$ A" p' U$ o0 M
{
0 \# l1 C! m5 E+ ^4 u$ m* Y! Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 ~2 y3 z# Y( G6 J4 P. D
i++;
$ V1 o4 L. H- g5 b
//if(i >= 4096)
, b' K8 @) _0 i2 c/ z
// break;
2 \; U% Z' b. W; Q; [5 {3 L9 t$ g1 C
; r% I9 ], f& S$ \2 T$ q; E3 v
}
+ d- T1 ~8 J, \* F! g- `/ W
UARTPuts("\n",-2);
( y; P0 t/ G, ]4 q/ A
}
" l( ?: ]+ j# p# D6 L
}
0 a# l5 T" d: G2 k
/ W/ [) {" n4 J& p" O- L( a4 q
}
! z$ j2 Q; D* u. b% Y
8 {+ k" [1 m o7 K
; L1 G- w! Q0 w* j7 x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; w8 t+ r O% N
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ \9 ~( t* J2 l5 d7 @; j$ Z# _, H
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4