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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( h$ L8 n$ i- l0 Xmain文件:
# s% G3 N: d& U; Iinterrupt void interrupt4(void)  - H% w6 P! z) H) N$ ]7 |
{, d* n5 |; G$ \5 }* W
  Uint32 sample;
* }& R+ w  @2 x6 J; B9 [( v# E
* S' N, ]  }- G; f  J5 S- v' v* a/ f" V  sample = input_sample(); // read L + R samples from ADC6 V0 N* ~3 r0 L+ ?
  output_sample(sample);   // write L + R samples to DAC 3 R& W* C1 m6 k6 U: l, c
  return;; s! }2 \/ ~  U
}
$ z; l0 U  M* _  [, o  A) F% _0 ?. I) I, W" ?" F" r( {
int main( void ), d( ]1 V& n4 X6 \8 Q1 O9 i
{# a; O1 i9 ^; j/ y- j( [

5 ], h% W, t1 s1 l    /* Initialize BSL */
( J( i( G4 k' F% g; g/ P& e8 T    EVMC6747_init( );' e: }0 |# S6 H
        /* Call evmc6747_intr function */' n' z# m" |, O6 i5 J
    aic3106_init( );* w+ a* o" ~8 X
        while(1);* S+ M9 Y3 f7 d
}4 X# a& w" ~! T8 Z
$ q" K' P" `& V; _9 @. t

9 `2 n8 `3 W' z% h) h, ?9 e2 Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% X5 q% S  ^$ h: V  a/* Initialize MCASP1 */
: l. v" U& t+ s' A/ \    mcasp = &MCASP_MODULE_1;
/ O7 N( ^8 q1 S' z    mcasp->regs->GBLCTL  = 0;       // Reset
" G0 J, _6 C. D, [    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 }, A7 B: M2 n; _/ d$ T! {    mcasp->regs->XGBLCTL = 0;       // Reset TX0 Z3 B( B, L2 S  o* Z, z" o
    mcasp->regs->PWRDEMU = 1;       // Free-running: C6 o% k3 D6 q, m7 U5 L
   // configure McASP0 receive registers: P- ~& [4 a2 L2 z" r- W
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 y6 G% g: B7 H; T! o
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 S( h1 t5 `  {( D8 V0 n8 B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 Z1 O/ I2 U& Q! R" z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 O3 `; p3 L) g' c# q5 \5 S! `: _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 W5 s( h1 z' {
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; [3 V. R2 S8 w5 m/ W2 {    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 X( }0 S( ]$ F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 P$ a% O. S3 R) s( p* }

& e1 H& B! r' K6 j4 k! {    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- g/ Y0 i5 v2 w" \7 c* Q8 i+ s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- H. k7 e, R, D: q& T0 D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; r' Z  L/ z1 R2 ^# L) J2 o) X9 {+ Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 A; H4 b. A; i    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, s$ {+ _8 m' f! A: x8 W" n! M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% ]; l( t% m5 o' ]/ j    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) g% ^: v2 u% j    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 v* {. |0 ?  x' p

; P/ {0 L4 M( ^    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- r* o9 O! ~  }( T1 j    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 p3 {9 [; z4 @% f  y) f9 u, K' p    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 r; P1 F3 V  r/ ^4 i$ D- z7 Q8 T    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: F; i: }! k2 K* ]8 X

* d+ _! m5 K9 m/ g. P    mcasp->regs->DITCTL     = 0x00000000; // Not used" F$ p( g% _  c" \# z2 q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' \! F% H& h! ?' D" a% q5 Z4 A/ _8 @
    mcasp->regs->AMUTE      = 0x00000000; // Not used
) P; r2 Q. l, w
6 @1 f, u2 o! e" O. Z/* Starting sections of the McASP*/
. m3 W" e! R! q    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( v  }: y! l: @$ k; n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 [3 b$ z- ]* b2 x    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" h$ Z  [2 E" A! [# e* z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ y# |$ r* W, x( U  Q0 y4 W
: Q6 I8 y% `' e! t    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* z' l) f( w: g( W' c3 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( J0 E3 K0 \$ \; n. K    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! Q4 g/ T3 K% k# W; f6 U+ T8 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 C: D0 x! i& x

9 b! f1 o% O, G" N) s$ k$ b    mcasp->regs->XSTAT = 0x0000ffff; 8 b' A! o- d4 m. I! F
    mcasp->regs->RSTAT = 0x0000ffff;
# C; ?) `3 g0 k# A2 r! ]
* t4 M" S4 w- f* E* F* ~  N1 }    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 G0 d& v6 Z& A# I2 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ g% h8 X+ R; }# Z2 s0 Z( B
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; b( t9 m# ?" s+ R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" M: a% b. |5 k- O) g6 a5 p, {) _
    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ |+ Y0 R) K$ |8 a( e    mcasp->regs->XBUF5 = 0;
* R% X3 j+ v0 l; I    mcasp->regs->RBUF0 = 0;
, m+ s; x) U7 o# P* g4 @" v
# i5 {! D! u4 t. h! M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# `& S! }, e$ b9 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 D- a2 J5 E/ I  t: \1 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ ^, z. H, d+ e8 [6 t* }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 _& B4 P" L0 \
7 L8 p' o$ m: F: b$ l% |5 i    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" X# T5 H" L, g" \1 l4 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; ~' }7 c; W' Q# \9 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 d1 @) B/ W# {+ x5 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, ^& u8 \5 W5 {( C
- ^' J$ e# Y9 p3 q! d/ w1 Y    CSR = 0x0000;
+ t: L7 a* i" y. z9 d1 M    INTC_INTMUX1 = 0x3d;" C  S$ g" O2 m; C8 O
    ISTP = (unsigned int)vectors;
% t4 b9 M- c( L) y/ q% v) `    ICR = 0xFFF0;    h. U1 F: [% s" y* f8 e$ B
    IER |= 0x12;  
8 A; i4 v: b1 v" S: N5 o* j    CSR |= 0x01;  ) [' {# |* G1 h0 k0 r
2 z/ X* M/ ?' `2 n7 t1 w& R

9 g% F6 Q. _( I( S5 e
: {% r' {: J+ f! @% z. h还有就是两个输入输出函数:) j; q) |/ B. p  O
void output_sample(Int32 out_data)6 p. J* Q: z) M
{" w( s' R7 m; _# }
  AIC31_data.uint = out_data;  
6 R# C2 l' R( |9 ]6 F& H  MCASP1_XBUF5_32BIT = AIC31_data.uint;  [3 Q/ N$ W, Y- u) g7 P4 f
}
9 L$ H$ J7 S! i: z5 Y$ _0 t6 \$ l
" k/ @! P4 o% [* n9 o/ G9 V- y  \Int32 input_sample(void)( z  A$ ~6 N& s5 N8 `5 a8 [" q
{  
* y" `1 P: h1 X/ s2 D  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 u, ]8 v. {. W9 V5 _5 w: g/ p  return (AIC31_data.uint);
6 P# r* X4 N/ V4 o  q5 g}- y$ A( X1 H8 _4 ?$ A& M4 |- q$ c

: q3 I9 g* t7 k! h4 }1 j0 J
分享到:  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-2-6 03:27 , Processed in 0.043478 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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