C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6154|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 V; j6 D% T% s- H( C/ U/ \& _4 D; Zmain文件:" O  {& I3 J+ K( J& w
interrupt void interrupt4(void)  
, ^, X3 U) M8 w5 {4 C2 s8 E{; W. g9 U, `  }* }$ k
  Uint32 sample;
* m! F4 r6 @- N  n( S' w. I
2 L# k& S" f% z+ \* a# E- m  sample = input_sample(); // read L + R samples from ADC
' {8 @6 q! u  G, |$ j2 K  output_sample(sample);   // write L + R samples to DAC ; ]  x. Y# y1 J& g  m
  return;
" J) {4 d# O6 ?- J# m# I}+ r: Z5 i& H9 ^
( y( Q" c. I( z' A( ]  u
int main( void )
# x7 A% e  B: ~0 ]{
. z; D' F# J1 Y. p, i1 `+ F0 S3 z$ R# ?, \9 M' \9 [1 P
    /* Initialize BSL */0 q' M5 ]9 b" K2 |& Q" |3 v/ B
    EVMC6747_init( );7 v% F- h8 J9 p; c) k( _1 H. V  P3 `
        /* Call evmc6747_intr function */& e" ~" f3 R* D- \2 Z
    aic3106_init( );
, C" J1 R7 M# m1 z5 i7 ^        while(1);
- [4 X& V& |/ Q. j, N, i}" h% ?2 s$ r( ?$ M9 X
$ _& a  W, @. O# j
* |7 f5 h' T9 v6 C7 B
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- [7 n) k3 k$ w4 k/* Initialize MCASP1 */
3 H) m1 z4 n) Q0 @. d  U# M4 F    mcasp = &MCASP_MODULE_1;
& B; w6 W0 ~/ R8 n    mcasp->regs->GBLCTL  = 0;       // Reset( T" a' F# b% z) K
    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 }- ]/ U$ O  S1 C& ~    mcasp->regs->XGBLCTL = 0;       // Reset TX
( `5 D! f% V: ?  s4 P8 t4 E$ q    mcasp->regs->PWRDEMU = 1;       // Free-running: z6 l% b$ f/ S
   // configure McASP0 receive registers; w, {4 e0 u: Y" o/ [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. X1 W8 i/ d" G4 N    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ c9 S/ o$ U  x& a3 w    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( A) |: d, y! K( C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, v% m1 `, T) V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 f8 n# m- i! g0 t, M9 [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' e4 I' K; h* H" j, @3 w) Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used, m" j4 g3 b: v9 s4 W- j( x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: m2 q, f+ m3 N/ K( g# ^" p" F3 ^7 n% b. a+ b
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: e* a) c  V2 r1 X( O    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ O; Q4 K6 j8 X: _% L    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) _: [1 Y7 [$ Q5 [0 R! f$ K    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# c. ?# @. n2 ]5 Y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
1 d9 V5 C3 O1 E* B* I& X    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# U% b% Z  I& u7 v. @) \    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; @9 y  D3 l( G& E) f2 u' h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# e4 f7 b1 K* Q; s  Z
$ w: ?' I4 i. m) }, {" k4 w8 I1 M    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ U, t9 Y. ?: z: Y6 B5 Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 t# K2 Z6 A! e    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 _* R) d' ?/ ^( V- i' K    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" y0 A! I5 x" V4 c+ {" N# y

% L# L+ @, h9 V6 t    mcasp->regs->DITCTL     = 0x00000000; // Not used
. X1 ]6 b6 `- }! J1 Q    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 |# J3 O0 _. k; i) I
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% e) Y* c& Z( q( ^! I) L5 B+ A1 D! F+ x8 E3 V
/* Starting sections of the McASP*/! p/ C6 X: v9 @9 q6 @; k9 w
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 A0 \$ O  Y1 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- C+ M8 r7 K. _# K- [* ^4 d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 N$ U$ V+ W& \3 l/ E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- O1 `4 c  \1 s5 C2 t8 D5 e

7 u: L$ `- Q4 G; k    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + j. C, X6 p6 E& J% k; M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. D: R' b  f) Z0 F. l( x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # `0 C+ ]9 L5 i* A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ _+ o1 R+ Q% C1 |1 t$ Q

) S, f  K4 c' y7 i" \; Y9 L% u    mcasp->regs->XSTAT = 0x0000ffff; * Z# I2 y" f. O: v5 Y' c
    mcasp->regs->RSTAT = 0x0000ffff; 9 ^( N. z) u8 w7 c( \- e

+ R; H) Y' Y& U1 p. n    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% J8 q' E( [, u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ G% Q' C# l! ^* w- T/ N' ^" J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) p" J3 U, x3 I! l# r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 T/ S9 c& w/ g0 B
! W9 {, m  F. }& A2 u8 g    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 g# f, ?0 a6 I' R/ t3 y    mcasp->regs->XBUF5 = 0;
8 s5 Y1 e) b. a5 p+ {# `) ?    mcasp->regs->RBUF0 = 0;
! f- E: h- |/ _' u- J) c: E4 p/ p/ |: b# l" M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ w; |* F' ?6 R5 h+ Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ |/ b& ~5 Z. R    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . S" Y2 I% g% ]6 ^* f. P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  _4 h( G9 |, I- D. O; H

5 Z0 u! E. g  ?' Q- n# L0 ^    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ n( [5 Y3 B2 a8 W4 o8 ^! w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: Q; t2 `0 a" Y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 G7 M6 N5 y6 {3 g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: M0 ?; n' \3 p2 J& f
9 w+ _% h" c7 n+ J% D6 d( O( T6 {  F4 v    CSR = 0x0000;
% @6 Q* k+ w, u  L. @    INTC_INTMUX1 = 0x3d;
! G! O0 ]3 s, b    ISTP = (unsigned int)vectors;
* c* i, g- K/ Y; i& a5 r- W    ICR = 0xFFF0;    n9 i9 U; R. }
    IER |= 0x12;    Q( W4 B9 S& ?' G( k! {
    CSR |= 0x01;  7 v1 i# P% {0 ]

: ^& L! [& Q( y4 O7 ^# k! z. s% K$ H( @: Y1 I* s

3 V& V% Q* S% F+ T& B还有就是两个输入输出函数:. [/ G) M+ B5 n/ u6 w; E  D
void output_sample(Int32 out_data)4 `5 `6 I: g7 T0 M9 m# x
{+ M; k0 X+ a% V3 v
  AIC31_data.uint = out_data;  ( e1 q, b# h" Y1 [( A0 |
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* P! r+ U$ K% q5 ]}
  ~1 o/ [$ N6 U0 Z% v# U0 [0 c1 p( f2 P$ P- r$ j( C- w# K' E
Int32 input_sample(void)3 d6 ~3 s; _; R1 n6 s
{  3 D% [5 G" e+ r, w
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% L. X- d6 U8 o/ U7 e- i( n4 |  return (AIC31_data.uint);
( H- Q7 h' O. ?3 U; t}
. _% Z; @- N3 V6 h  j0 v5 c# ]' d) f; G. Y$ a( p) O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-30 21:19 , Processed in 0.040424 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表