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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 e. |4 \6 G/ \main文件:; k6 P- B# @+ h6 E5 O
interrupt void interrupt4(void)  
- m3 H9 ~6 K4 u$ O{
4 t4 l2 V7 s/ B8 Y6 Y; f- S& D  Uint32 sample;
& e9 g% \" o' p- s+ h# G% b4 @, C/ I6 O( X, N$ u0 i
  sample = input_sample(); // read L + R samples from ADC
6 D, b0 u" ]$ L4 W! J! P  output_sample(sample);   // write L + R samples to DAC + }: h+ B3 H- O' B
  return;; w; l7 N& h: L2 ?( l* ^
}. z7 s; X7 c( h5 r* @3 `8 r. h* Q

. |$ V% z( T9 o' U1 B0 Nint main( void )
  \$ F1 s0 i! k* E! k5 G- W$ [{
6 I& K$ S$ {# v* [& |4 e
7 K# Z/ E/ k+ v& u1 ~# Y    /* Initialize BSL */
3 Q: y7 u0 f4 A/ U) R1 L    EVMC6747_init( );
5 L- V! W* {4 I5 t/ F/ R        /* Call evmc6747_intr function */
- `+ R  ]* a5 k; I    aic3106_init( );2 k! ~' o' ^5 r. X+ |+ }& v
        while(1);
5 C0 i; A. n# V) t+ q& c}
+ ~" \) `$ U+ y0 b1 v7 K7 X
: k2 c: b7 j9 ]6 ]2 i! |$ f0 B& \0 n! k  e" z0 V; r
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# |. A, C  l3 k. g% X/* Initialize MCASP1 */
$ h0 o  U! {8 i' O  s& G. l    mcasp = &MCASP_MODULE_1;+ s" G' p% B+ r- x. C0 K, \2 T
    mcasp->regs->GBLCTL  = 0;       // Reset
, M! Y% A; m; a5 d/ Y6 S8 ?$ F% M    mcasp->regs->RGBLCTL = 0;       // Reset RX/ K: G5 [; ]8 A0 q
    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 i4 s  l4 e5 y% ^    mcasp->regs->PWRDEMU = 1;       // Free-running
( r, `1 B% w# E, p2 \   // configure McASP0 receive registers
( d& @! ]6 S* j( }0 w% u    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ @) ?' g- Y6 {+ ?5 v- b$ W# c
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 c; h# e# a9 g4 s' C. g1 L
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 X  |1 s+ S' F+ c* [
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 f0 U+ ]0 n; j    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). E; v1 R! J4 _9 n$ r
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* k0 n) K- j! \+ K, [7 d    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ q# l" G5 z! ^9 t1 p1 Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# k2 y( ^1 f* P. K1 D

* {4 n0 z5 \; R6 {# O2 Q& l    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* L1 ]( b$ E* K. U    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- f# z, S1 [2 Q0 v8 w    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- y+ h* r9 S) A: u: R" h' S    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* c7 q0 C: Z7 b) B, o
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& l7 |" T) D& i. M; R4 Y: C0 a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: p$ z$ j: F$ [2 t0 ~# k5 V9 B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* G/ ^. ^6 o& S, l# d
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 @/ ?, ]5 t  j1 W5 [, x% d' W+ G0 u3 E7 k. p/ A
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 D$ ~: @* l6 Z& s    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, y8 l: P5 J7 D: Z! B- H
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ g) R" W3 A$ L3 q/ U( V    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 O* M3 S- @  c3 D/ B
8 _- ?$ b" V5 C9 b! N* {
    mcasp->regs->DITCTL     = 0x00000000; // Not used. M% U* X: ?" W) L! v* C, u: F. z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) i% W/ N0 u0 q4 S9 ~1 g$ `    mcasp->regs->AMUTE      = 0x00000000; // Not used+ j' E% V2 J. |7 F

# x8 H9 j, `2 ~5 P: \, K/* Starting sections of the McASP*/
4 z& T9 n( }0 v$ I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 F. x" d9 B7 E+ U4 I4 E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 b( v1 I- n# M
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. w9 ]9 [  C5 J6 h7 w1 F& C: P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% {0 g& I3 ~* F6 e, j
) f6 _9 }8 m6 ?& i8 d5 b! {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 l" S7 X2 z7 Q0 }+ A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 T% o$ A7 F9 C$ C2 ^) S- F
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + f: p# H; u' c! f6 @4 Y" q9 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 v# r/ P" G6 A. |
$ r& \( k- h- j8 f5 H  b9 o
    mcasp->regs->XSTAT = 0x0000ffff;
1 [- }* C. J# z3 G- r' G3 W2 p    mcasp->regs->RSTAT = 0x0000ffff;
) M* T% E# B/ e- e
' k& L8 d2 b; Q; k2 A7 N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; B. I9 d- N& V9 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 o- q% i# [; B# m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 k) Y& G' _# ~% m# a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 I, L4 v8 F; x4 U4 _% y. w

9 E- s7 I9 F2 s" E  W. x  x    /* Write a 0, so that no underrun occurs after releasing the state machine */
: F4 ~- Q  G8 K9 H5 {    mcasp->regs->XBUF5 = 0;& e: d2 _* ~" N; I5 V
    mcasp->regs->RBUF0 = 0;
# W5 ^% f5 \9 E  N
/ W8 d. U) j6 \2 i% j9 l    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 U& |8 X; o" I# C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 \! T* z8 }& T
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 `! R/ Z5 K9 L, p" x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! L; r- c, ^' P, {! f  z$ r
1 z# [3 G: g* U) p" r% c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 K" p& D: O8 h9 t. f9 {7 Q& K8 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 a- [9 k* m2 _' ?& b    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; Q7 J9 w1 @* h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& F( Q9 J) o& L' [0 W# k  r  w# T

  q5 w6 r% P3 [; y    CSR = 0x0000;5 y) G1 P5 S1 p' h
    INTC_INTMUX1 = 0x3d;
  L3 i& ~$ Q* i. P% O6 U% L    ISTP = (unsigned int)vectors;, @) Q; }: C, c8 B4 e1 D
    ICR = 0xFFF0;  
7 Q/ Q: w, ]& m. ?8 s    IER |= 0x12;  3 h( |$ h' j( a' f0 T# U
    CSR |= 0x01;  
  t- O9 O6 P0 C/ }" a
% V3 G% C2 t& L( [! d) A/ }  P0 p; s: |6 a

: C; S6 o5 e! k( s& A还有就是两个输入输出函数:! U+ e7 [* A9 k; c
void output_sample(Int32 out_data)( {5 j, a5 m/ @8 @! ^% i
{6 a' d( n+ l3 _6 _0 b
  AIC31_data.uint = out_data;    v4 p' s7 Y6 R7 x
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 y! R! }6 V2 X4 ~) u+ g}* q/ l; {7 R; C# }1 e8 w
; p& Z0 D7 M% S
Int32 input_sample(void)% A( {% }" p% n$ K$ z
{  $ |% M- v& g4 i; c3 S" P) {. ]
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" Y, Y; A2 k7 f5 k1 q  return (AIC31_data.uint);1 r) U5 K# A; {
}
3 D" |: C  \" a! h# t9 V6 P; C
1 T! o- E0 H& [. {6 O1 T
分享到:  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-4-5 04:40 , Processed in 0.042904 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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