嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& s1 \5 Y# e& A1 Y
Void UPP_TASK(Void)
& M+ ~! C2 H4 |9 D% Z" ]
{
, C6 a, b: H4 C& k: H5 N/ w
- {# I5 w% J% P: o C( L
int i,j,k,target_int_count=2;
& P) P# H8 b. s
char ch[2];
" V6 G3 z* i! _6 J. x
) B; G3 v/ h$ m5 @* ^
/ g3 \/ @) o" F
5 s4 B( z3 K3 v U1 m; R7 U
upp_interrupt_count = 0;
; B" u( ]* _+ b8 w2 f/ J% Q8 Z7 \
upp_error_count = 0;
0 I' C" n3 ~- {$ T ^# d
: x, p) `/ Z$ A6 I7 V
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. P$ I9 Q5 h1 X
// Initialize data buffers
+ D" C4 D. }# v
for (i = 0; i < upp_frame_size; i++)
; y( E; X# ?& i0 T5 n1 W
{
9 l! i! y! }6 {3 O9 \% t. U
upp_buffer_b
=i;
; R' l- }* I- ^0 @, Q' ?1 l. ~' U& ~
upp_buffer_a
= 0xDEAD;
& W O% k- F+ O9 h, {
}
4 T2 ~* F5 L A5 ~
9 @4 ]+ ^0 t4 Z
//for(i=0;i<1024;i++)
; M5 P5 a) k, {6 b
// temp
=0;
& H' k8 |, z0 n U Z) }
6 V( ] L* `* a6 S1 h& ?
//UPPReset();
7 M. u) M3 y0 O2 Q# p5 v
/*启动UPP DMA传输*/
* o; u! v4 ~8 i/ L
UARTPuts("upp_prog_dma_i\n",-2);
- P/ i( v! l3 D, X/ V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* y6 w: a8 C* S9 @- K m, \
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! m% b) _( |! Z& X; ^* f
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 U( \, ~( b& o4 h2 W
/ O' o; C9 f/ u4 H" g5 k2 v/ I4 O6 D
UARTPuts("upp_prog_dma_i\n",-2);
) H3 b) |' J |+ a1 m V/ J# c
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
8 P- n# N4 j$ Y0 O, d) f! @* n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 \# s; Y2 c0 |. V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: R5 H% _; d# @/ a- ^2 d
0 B% g' r \; Z
/*等待UPP传输完毕*/
7 s$ G2 H; P( h+ W, Z
//i=0;
( H) V$ V) ^& h! a
//j=0;
/ h- ~* J! J- L# M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 X8 x5 @! o+ |
{
2 p% ~& ]- m0 Y; ]8 v% m
/* 测试UPP传输的同时操作普通DDR数据
J5 o$ v" ~8 F
temp
=i;
+ {1 `6 G# y# z C! y$ D3 Z2 ]
i++;
( D1 H: g& g/ N6 Z
if(i==1024)
' S1 U) B1 G4 { r( K8 h4 q
{
1 }8 W4 i$ a/ r; o+ Z/ _$ Z4 g' _# J
i=0;
$ a4 Z! E& Q6 u" X/ ^
j++;
3 s' y( e" U8 }
}
7 H3 j# g1 ^6 f+ @1 v' g
*/
6 L6 ~2 ^# z g5 n `5 T
0 [: ?6 j1 V, q) |2 f& b7 ?
asm(" nop");
4 {6 N( S: |" q" n2 {% W
7 A; R1 `6 z X& P) A g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 [2 D1 q4 Y* o( v n; f" N! E
}
9 W# ~7 s a, @3 F$ ^) n& I. {
! p9 X3 K/ R* q" E
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 A, \+ [8 S) z6 f% P
//UARTprintf( "i=%d\n",i);
2 G9 `0 m- ?$ d6 [5 I3 I
//UARTprintf( "j=%d\n",j);
, i$ Y$ x6 u' d( C/ X: }
UARTPuts("Data mismatch in buffers.\n",-2);
3 g# Q! a; N% A5 M
if (upp_interrupt_count == 2 && upp_error_count == 0)
! a4 x( ^, Y+ n6 y( X
{
% U$ I+ L4 }; _# _" R
for (i = 0; i<upp_frame_size; i++)
& o6 q2 \3 N2 Q1 T k, M( U
{
" V3 b, I( a+ o) P k
if (upp_buffer_a
!= upp_buffer_b
)
( Y3 Y- B3 b6 o' g/ `. t3 ]
{
# J3 ?/ M9 p% `- k8 @
upp_error_count++;
5 ~) D6 O' l. V8 ^/ a% r' h
}
S. G, h) j" j' P7 Q
}
F: L& o( G0 F9 j" B: F
}
/ y) D$ t" T: T. W* s
" H X8 m2 a% q; _% q! V5 u; X
/* 报告通信结果*/
3 y ?! ~7 z' h4 v# I2 F$ Z+ e H8 @6 ]
if(upp_error_count != 0)
$ L. K! u* a4 V6 ^7 ^& Z9 E. }! F
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) l; G. \, L8 k2 H9 m/ w
else
( p; R* q- y( P$ M9 G& s! z
UARTPuts("uPP transfers complete!\n",-2);
0 u" P7 u: l N% u+ v( H) h
) e7 w& S) h7 B4 D7 w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. c4 ^& A ? W
UARTGets(ch,2);
& |( X, u }/ @9 W6 m9 f. |' M* i
UARTPuts("\n", -2);
; e% R; q- X$ I1 t' L5 b5 g+ e
" E: u5 j# f1 ? t2 m/ I
if(ch[0] == 'y')
# x# L" |! g* u, [
{
/ t/ v2 I T. b5 r: e" u8 @3 l9 N
/*打印全部读到的数据*/
) `+ Z% Y5 s2 R$ g3 v4 M: a
for(i=0; i<upp_frame_size; )
; L1 K/ Z/ ~3 S/ @, a
{
! X: A: U; R2 Z- _
for(j=0; j<5; j++)
3 w6 [$ [) v `) U5 W
{
# `9 y5 \, T: y9 l; z& a9 u
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
8 ^$ ^8 W N6 I) w1 q! h' @( e
i++;
% v4 m8 {1 _ o4 I6 S9 f
//if(i >= 4096)
4 B4 E; J" w, ^9 u: z8 j2 U
// break;
" d- D: D5 r4 y7 Z' G
; @% ~9 K% \/ E' v. e
}
1 P. @+ ~# n+ N
UARTPuts("\n",-2);
- e( ]% M5 K- A; K
}
, c0 ~' Z- Z; C" Q( T8 j2 S' j/ g: [
}
5 U5 _6 P( B" g8 X9 l f
+ x, f: Y" u. k$ @9 r: I
}
3 \, H- W8 U4 B) W; c. K
( w6 ]3 ^ N( f6 \
, F. l2 Z' f: O- g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" o4 `, }# a; W' u k$ {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- f2 d# I( Y o9 @# M( [
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4