嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# p! V5 |, a) Q' B# E, j' B. H/ @
Void UPP_TASK(Void)
( Z/ r1 W: U9 L$ f( w, A
{
, P* y1 R* p; m9 i8 D0 w" z
. S0 v& n1 a7 C1 c" Y
int i,j,k,target_int_count=2;
0 h) P0 |' R/ Y- b0 Y+ H
char ch[2];
1 w9 Z) o2 E9 q$ i/ y# I
+ x& ]0 m: i+ Z* ^# b; X
+ m1 c6 O! p! H; U4 I% ]
" X# B( x8 \ q+ n2 z
upp_interrupt_count = 0;
$ {1 o* U" {/ ~8 e! j! t2 H
upp_error_count = 0;
# _) K% L7 f% m; e1 O' @& [
9 n" y2 E& K6 s& F3 n/ e* G2 @
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' s; T5 X5 ?# b1 z1 ~
// Initialize data buffers
: M. x2 @" y+ c' S- b
for (i = 0; i < upp_frame_size; i++)
) u8 Y, T' ], K. ~9 |% n
{
0 Q# G+ n, F8 i. ^% l5 x
upp_buffer_b
=i;
( k2 c; B8 ]" l$ O# J m% @
upp_buffer_a
= 0xDEAD;
4 L j5 j0 `( a1 C' t8 Z
}
, _' H! O6 V3 a3 l/ L- u" @% e a; M
! m" V+ F5 r6 c, C3 E$ j; o
//for(i=0;i<1024;i++)
1 A, T) \) J8 k+ H" h
// temp
=0;
; T2 Q* E3 j, k7 @
* U7 h$ T& d! p; F
//UPPReset();
% j' N. B" G8 E N
/*启动UPP DMA传输*/
2 H" c. N+ C7 {; V _7 `
UARTPuts("upp_prog_dma_i\n",-2);
; K7 S" B* \: K# W& a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% m1 @/ V) L5 a2 J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ [, _9 \( |: x2 h
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 b9 `3 P3 U+ F( u* f
1 R- |5 V6 e: J1 z! s- S* Q
UARTPuts("upp_prog_dma_i\n",-2);
" x; [1 u% R8 Y/ k# o( i5 y6 q( y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" i; B8 j ]2 [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 O7 w1 \9 z. A. ]' m) m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 P9 a& E% n" B: M& H3 p' D! z! o
5 E3 L8 U5 F5 j% z' q
/*等待UPP传输完毕*/
* y1 d( h3 F7 g
//i=0;
3 d$ V$ Q% j8 ^: w
//j=0;
% H) c7 `& b# `0 c+ d, X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( [5 H" F# p# y/ p
{
& {" {, X. g- h5 b' ?
/* 测试UPP传输的同时操作普通DDR数据
, ~% I t" i& W" w6 ~
temp
=i;
% x+ S# x4 _0 ^" B# x
i++;
, D* k1 u7 Q4 _
if(i==1024)
+ L A2 K6 n; i
{
0 y0 J* T5 r% m F d
i=0;
5 ]4 Y# V4 l3 {# y
j++;
. i' h4 |, C! T$ S; w/ W0 W4 `7 Z
}
2 }$ r4 K! V+ O% T, u V: L
*/
1 f* V; @3 Z5 e3 {7 F; t+ \
' K9 @% F' Y" f2 s9 t
asm(" nop");
3 U+ N2 R4 R% C* R1 G
6 K# t+ r0 t6 }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- u" U( `8 ^: f1 ?. ]8 K* p! ?
}
1 ~0 h# R/ k" b: \
+ ]. t- j3 c) y2 V2 ~/ w; N
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 t' s4 {- w( y P
//UARTprintf( "i=%d\n",i);
/ [' w7 D6 {! q9 Z+ ^# `
//UARTprintf( "j=%d\n",j);
7 j1 x( K8 a6 }, m2 @+ X
UARTPuts("Data mismatch in buffers.\n",-2);
/ j8 z* g9 y2 Q8 p
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 P) r+ U% i; F
{
8 Q# f, \4 | ?$ ~
for (i = 0; i<upp_frame_size; i++)
( \0 Y4 C. s+ I
{
J, ? j2 i( O
if (upp_buffer_a
!= upp_buffer_b
)
! c% ^" i0 M1 T* L% H
{
" k2 N/ y! N# P# F$ J5 [7 J
upp_error_count++;
8 u4 o' \. O+ j9 c5 N7 ^
}
+ C- K$ i3 p5 D6 }; _* s; I
}
) e7 T& S5 ^% u; b. Y6 w
}
y7 g6 P) i, @) j, W9 `
5 J- D! ?* N) Q2 j
/* 报告通信结果*/
7 B% d4 z/ i8 e S
if(upp_error_count != 0)
$ u' C) p7 F0 ]9 u$ D, J2 p2 g2 ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 t% q t6 M* w/ ]* H$ ]. A2 i3 z
else
; K; z1 N7 y, k+ P% q
UARTPuts("uPP transfers complete!\n",-2);
& V2 y/ P. N2 P% F
, _0 n, ?' p* M( [2 T
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ v" S4 Z( }' z ]
UARTGets(ch,2);
: C8 X+ V. ^- X; @- y- f
UARTPuts("\n", -2);
. x: Z6 }2 }, Q0 X) l
% D. t. U6 G" ], L: Z
if(ch[0] == 'y')
4 U' s9 h! r- u: W. Z
{
/ t9 h0 V1 o J: J8 T" p n" }* H
/*打印全部读到的数据*/
) c) a0 y3 U$ W
for(i=0; i<upp_frame_size; )
D1 x7 m# _8 p& ]2 @7 g
{
( J1 g- E/ E$ D2 ]* ?1 T; g' t
for(j=0; j<5; j++)
9 m7 K& d* W9 }/ U
{
8 g/ r/ b m0 K* f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
u4 y. I7 A1 J- K
i++;
4 p: G3 y; U$ A3 F+ h/ |, @
//if(i >= 4096)
( w! \9 U! A( T9 f8 O
// break;
9 v! G1 M7 D7 u6 D
8 `8 t; g7 `2 t- m( }
}
! H! e; r r& z# V+ H& F
UARTPuts("\n",-2);
6 g) v/ @* s: R$ @
}
8 f4 x9 `3 f. ^; p
}
$ P$ O# v. R( a6 K6 `1 S
+ x$ K0 Y' c! q5 A. ?* e5 z) K
}
$ B6 {/ D3 {8 U/ V# l4 G4 L, \' f+ L
& F9 \1 j; |; v- ^2 i0 s* _) V
& ]( @3 h7 G9 Z3 m( U
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 s. R$ |) i! G' k) G
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 V- W1 T# P+ c
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4