嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" N% `4 `! |) f% j L/ R# Y
Void UPP_TASK(Void)
% `! s. f' z: N) x5 R- I
{
$ h1 b1 `" _. J0 S
P+ C9 {2 E/ @) K) s9 I
int i,j,k,target_int_count=2;
& \; y0 _7 A) H3 X p2 t
char ch[2];
1 p: I/ O5 D8 {* J" t# r8 ?
" W5 ^0 [$ W2 a5 r7 D5 P* D- n4 _! Y$ c
6 Z) g, b8 x: T: G
4 K% c5 K- a1 p' [$ J$ \; [
upp_interrupt_count = 0;
6 a7 R( @5 A9 u5 V
upp_error_count = 0;
/ Q! Z S B, y; B9 i7 d% R
% _/ f1 @4 L$ ? v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# c/ X3 d& x9 h3 X: A
// Initialize data buffers
5 W# K7 Q. |3 R" c; Z" C* J
for (i = 0; i < upp_frame_size; i++)
+ A2 \0 C- r5 A. q* x* H" i! H9 @ m
{
' f/ Q {2 \1 u& m0 d" ?8 u" r
upp_buffer_b
=i;
3 q+ i5 z9 [2 K2 f
upp_buffer_a
= 0xDEAD;
* T3 o- W8 G; b0 X# `
}
+ T, B O! V5 T: o$ E
5 A" \- e i5 z- T/ N3 f2 W/ q! ]
//for(i=0;i<1024;i++)
! c. q# ]% g3 Z
// temp
=0;
$ D9 ]' N( C/ u7 r' ~1 C- l
" \ u8 a4 U9 W; {
//UPPReset();
( e/ v/ X6 j7 U7 Z7 o5 K
/*启动UPP DMA传输*/
% ]+ U5 j- `4 F2 V( H2 j0 U; i
UARTPuts("upp_prog_dma_i\n",-2);
% W4 ~0 v2 N! v2 M0 _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ m Z" T$ P- q1 B* d! b8 b+ O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# s/ U7 [" K# e3 g6 ]4 t+ c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 C2 v$ J; J3 k2 n6 A& C- c# a
5 m% P" h, |; o3 G9 V
UARTPuts("upp_prog_dma_i\n",-2);
1 `3 a5 N% w( P, F
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' f# i( u. P: U: S( [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
M# u* ~" l( V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
9 }6 Q6 |5 r5 ^5 r3 p
9 n; B. E# u) S0 E0 M1 ^
/*等待UPP传输完毕*/
! Y8 Y: u0 W: V
//i=0;
0 O# ?& u- O' y4 v; o5 @ U
//j=0;
. k; @1 [& d0 j( ]! m
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 i: O! s( O9 x3 `: L
{
2 W* g7 `" S$ u9 Y: V! `! {
/* 测试UPP传输的同时操作普通DDR数据
$ M3 R7 @" ^( K0 U. j/ z; ?
temp
=i;
8 S+ E. a* b( k2 e& z, l7 f0 D! }
i++;
) D0 {" ]0 h: c9 _0 r4 k
if(i==1024)
% L( _- @4 B' z2 U( N5 h) Q: g
{
: V0 t, B- ~6 M3 |
i=0;
2 `8 O" s" `4 G: N# A
j++;
+ D" F3 ? a& r# ^
}
2 h, k+ I9 I& q) y, R7 X
*/
0 w9 L% E1 m5 H8 _- t' Y
. S: H% W2 s0 S7 p
asm(" nop");
# E5 i$ r* w: q# c1 {! C
% Y6 M; t. ^6 w! r
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 t) p; n$ t" G, P& V* {
}
5 |8 G- p( f; V4 G
; R+ P- r" k* T O2 ~9 x1 \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, k+ Y9 S+ v8 V: Q% i: B5 t
//UARTprintf( "i=%d\n",i);
/ m' O0 M/ ]5 J
//UARTprintf( "j=%d\n",j);
" I) B v* t1 r0 t
UARTPuts("Data mismatch in buffers.\n",-2);
; r# ~. q& ? {* P& X4 W0 ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
. X- m x5 u q% Y9 C! [
{
0 ~8 u* c( w( h9 p
for (i = 0; i<upp_frame_size; i++)
! G& F: H; @" s- G* k# U! H5 a
{
9 z& Z5 ~9 ?0 X3 V
if (upp_buffer_a
!= upp_buffer_b
)
6 ?( g0 Z5 b* h& }
{
' z. O% B3 i6 {; O' S3 E
upp_error_count++;
, t1 ~* B( i# I5 t g" a
}
" ^8 H& _0 f) z5 w- l" `8 C# ^
}
2 Z2 _! T9 X1 e% g6 o$ O0 g
}
1 N' ^* q8 ?& A( S) Y8 K ~
% ?7 J9 P3 M: I. ~# q$ g/ S1 ]
/* 报告通信结果*/
6 W% m7 \6 N) `
if(upp_error_count != 0)
0 n. s8 k( S+ d
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 |. `, S% {( S+ S) H: `$ m
else
9 n" u e' g6 M! _* C3 }. M' g( d* j
UARTPuts("uPP transfers complete!\n",-2);
: B6 o2 G) \, C3 v5 n
0 a& P) g& ]7 J6 w- ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ x5 L$ i2 L$ o d" q
UARTGets(ch,2);
! Z. `8 Y1 n% n: g6 \3 x
UARTPuts("\n", -2);
# R. S/ W2 z3 C c+ V
' O) d7 D+ Q6 J! e: M9 v: t7 z
if(ch[0] == 'y')
5 M- u% n. `& {7 p8 ^/ ?
{
' c( f/ z7 J2 G- i: H; J2 `, C( [
/*打印全部读到的数据*/
2 Z1 b/ E1 j, `+ t
for(i=0; i<upp_frame_size; )
# M' J" u# A/ B3 S) ]
{
8 N; C0 N6 i+ O$ S0 {
for(j=0; j<5; j++)
S1 C2 X/ U. n! L3 Q& n" O
{
$ E1 H& z( q& n$ b' A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 R' `( T4 r, R4 j: V0 ]! h8 ]
i++;
& D' N0 z- ?; ~4 i8 M: |: @: ~3 ^
//if(i >= 4096)
/ L. W+ ]& S. z; G4 Y4 D! i$ u5 U
// break;
6 v/ }( L3 G" ?/ L" y" O
! \5 C: k) f$ M! U! a! s3 u* D
}
% d3 \; S% G! Q' S& e4 H( {
UARTPuts("\n",-2);
5 ^ N/ B7 h0 W7 s; t
}
. U! A8 D4 e! E8 C9 A0 J0 }# S% Q; j
}
4 [& `* R/ x A' `' D
+ M, M6 Y7 d: I) v) C( I
}
0 P9 G, B# p' w5 e: g
! W8 e8 u9 O! ~% X1 f5 F% R. p
, Y3 e4 \8 ]& Z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: i; Q2 G$ U, O, u5 T4 h9 n1 O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) S: R+ C) s7 i0 {, X
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4