嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
?# }4 W' G3 Q+ w
Void UPP_TASK(Void)
. x1 }3 Y4 ^2 |; ^1 B% g& y0 e) E
{
' p. A* F4 E8 U! c7 L
) d( i8 |) V9 y. M/ w8 U
int i,j,k,target_int_count=2;
0 j: [- h- \0 P8 H6 s
char ch[2];
! N" A$ g, e* K: X
2 s C2 Y' {1 ^# K2 C
$ E1 l1 h4 y8 L* t& S8 c, B
) f; q( _5 ^0 B+ D9 t
upp_interrupt_count = 0;
a0 l- x ~5 R1 k3 C* @
upp_error_count = 0;
# ?4 J3 R6 A# H+ s- m* N; Y0 f& H
4 _( a+ W) Y1 \
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# p& A+ k' n" m8 P$ H# e
// Initialize data buffers
F: `0 @9 R3 E. H9 V# ?- M
for (i = 0; i < upp_frame_size; i++)
. ^ l6 F5 m% y4 M$ i: C2 _
{
! O7 j& B4 ]2 l) Y6 n/ b
upp_buffer_b
=i;
% w. d J5 i; [% M% d
upp_buffer_a
= 0xDEAD;
9 J% S' V* ^$ G9 ?+ T& b. ?( H
}
! \) C: [$ C9 B. h+ j2 x
a3 [4 j B% p8 ^/ `7 l; ?
//for(i=0;i<1024;i++)
" S4 F# L: c7 s- s
// temp
=0;
3 k7 S2 E: B$ E3 d2 z
5 A: c, r& V% V! A( w. F2 {8 `
//UPPReset();
: ?; X% T' d; h* A' M) Y
/*启动UPP DMA传输*/
* V0 H* T+ v3 _0 |
UARTPuts("upp_prog_dma_i\n",-2);
6 t; H, U) L8 Q4 t3 `
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. U7 [- ^9 F% [
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ i, j3 I; E4 D, ^* d6 g2 E: y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- Z) S w- X( R- O1 O
. s/ `( O! G( u
UARTPuts("upp_prog_dma_i\n",-2);
# I: z" K4 }7 S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ a# \$ m5 Z. p8 W4 t0 o. V- y) y& A
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 c! C+ j' J3 K5 c! [$ L
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! F1 v. M: E9 c$ o* k
' b( a- |% _& [! l1 [* }4 h, }
/*等待UPP传输完毕*/
3 ? G. |* r* u+ ?3 W7 a$ C
//i=0;
/ S) y; I8 Q* l4 n' o% x2 C
//j=0;
; D$ B6 U3 C K
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- |/ Z/ G0 _2 R8 E/ V* B
{
$ ], d1 n2 @3 Z
/* 测试UPP传输的同时操作普通DDR数据
2 S+ ^6 m" ]1 Q/ m' O
temp
=i;
# ]" V, c2 G& N; R) j
i++;
8 X4 K* }2 H8 H: y8 p5 l7 q* E
if(i==1024)
+ I h7 a4 u j% A( N
{
4 C& K* y% _+ ^$ f) u8 R
i=0;
( v3 a. q& f; t' o+ l) y
j++;
+ [8 p) U, J" E' Q7 p6 M
}
3 J% O# H/ n" i
*/
. R6 a/ `+ L& z! N ]2 {* c
' \$ i* q; ` L v" d+ W% {
asm(" nop");
: F6 y! |( L7 @* C- m
' Z; B" k+ w, u* S( B5 L* D# g9 ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% C6 Q4 L" f, z9 U( h) b* h
}
2 K) d& o7 _! _! y' z+ j# K9 Z
, Q3 R( T0 |, o: Y0 ]( _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" s4 F/ V1 X* X2 ?6 p2 x; [: c' l' Y
//UARTprintf( "i=%d\n",i);
. q1 o* b* g: Z4 E
//UARTprintf( "j=%d\n",j);
$ i$ I9 O; j7 J, R
UARTPuts("Data mismatch in buffers.\n",-2);
/ T; F+ F# y1 Z' {$ o: W
if (upp_interrupt_count == 2 && upp_error_count == 0)
- C% a2 ]* N0 N0 h ]- n" ~
{
7 ^! u5 G0 }' A- n; C6 x
for (i = 0; i<upp_frame_size; i++)
) X" ^5 G2 D3 L8 R0 y
{
& }8 V9 O, q, V& d% r; u* c* D
if (upp_buffer_a
!= upp_buffer_b
)
' i) W& l( x+ a
{
* O) h: |( n" e6 c: c4 u( g @
upp_error_count++;
( o9 y# v3 r* e0 E
}
+ {: c. W8 `* T
}
* z* v r- [9 c9 i" P' K+ n
}
2 G8 Q; I, k# B1 k) J/ \
' H5 h# g6 C4 c) M o! p
/* 报告通信结果*/
/ Y s j' Y. p6 P: M! }# q% V' x _
if(upp_error_count != 0)
) b' D5 w% _2 g7 n! \" z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 d. m/ o& Q+ t0 g$ Y' C y
else
4 N3 T) b6 {4 w
UARTPuts("uPP transfers complete!\n",-2);
2 ?" G/ X) M4 K- T
. M9 B4 K( ]+ t+ w& ] k' t" {' Y7 W
UARTPuts("Do you want to print all the data?(y/n) ",-2);
?! V; h6 x1 t* K6 E
UARTGets(ch,2);
& l' ^& q8 d3 H# [- e+ V
UARTPuts("\n", -2);
1 H4 H: g8 [9 T, O0 b
) U* _7 s6 H$ B5 v$ a
if(ch[0] == 'y')
' z2 B8 `, `0 ?+ `
{
( ?* D. O) _) g; s$ J1 I0 H
/*打印全部读到的数据*/
/ k7 M3 ]4 e& b+ S3 o
for(i=0; i<upp_frame_size; )
8 Y9 E+ |- @5 Y# j
{
! C u3 ?7 {+ h0 K# g
for(j=0; j<5; j++)
+ r9 \# b9 G3 K* M) o: L( L
{
) y$ `( p9 @. ^) o( K8 k1 y0 N* o2 Q+ q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. ?2 J+ |: z9 Z/ U( v0 F/ g& p
i++;
& {/ n) O) i, h3 C
//if(i >= 4096)
- a0 _& k# y9 |8 S/ ?* j
// break;
. I2 I; B0 A$ k, x. J
, U6 W( G( ~, U. P* B! @
}
5 m Z$ A B- I5 P* n/ J' b; q
UARTPuts("\n",-2);
. O" d f" g+ G. v Y) _& b
}
: M, X5 ?- Z5 v1 l( t& Q
}
7 ?6 @) ]4 H0 W( r- z+ p1 \
" P* e3 R" A& p, U/ o
}
# R7 ~+ m; \$ {& o; Q1 }
Y' h X& P! a1 ?) t) {1 X
( t& }+ E! P( X9 Q7 \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ V r: H7 @8 b
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; N4 \. [/ B7 i& `% Z: S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4